View Full Version : [Java] Un modo per modificare qualcosa di già stampato nella shell (su più righe)?
wingman87
26-02-2008, 16:25
Vi spiego il problema. Dovrei stampare una matrice che potrebbe essere fatta ad esempio così:
....#
...##
.....
Ora dopo una certa modifica la matrice potrebbe diventare:
..#..
.#...
....#
In pratica, potrebbe cambiare ed io la dovrei ristampare. Mi sarebbe piaciuto stampare la nuova matrice sopra alla vecchia e qui sta il problema, come faccio a tornare su di riga? Per tornare all'inizio di una riga basta usare un carriage return ma in questo caso dovrei anche tornare su di 3 righe. Come si può fare? Grazie, ciao!
Oceans11
26-02-2008, 16:59
mi sa che in puro java non si può fare...forse con qualche chiamata nativa a funzioni c...c'è una che pulisce lo schermo...non mi ricordo il nome però:(
wingman87
26-02-2008, 17:21
Non è proprio quello che cercavo ma si può fare, tanto mi serve solo per fare dei test. C'è un modo di usare i comandi DOS? Potrei usare cls...
la cosa non è fattibile ne' in Java ne' in C. le librerie standard di questi due linguaggi hanno solo dei concetti di "standard streams" (che sono appunto degli streams, si legge o si scrive solo in una direzione e non si torna indietro) ma non hanno la minima idea di dove vada a finire il contenuto dello standard output o da dove provenga quello dello standard input. in Windows questi due streams sono rediretti ad una finestrella nera, la classica console, che si gestisce tramite le apposite API:
http://msdn2.microsoft.com/en-us/library/ms682073(VS.85).aspx
ma più che altro ritengo che il design della tua interfaccia testuale sia concettualmente errato, quindi piuttosto che usare JNI (e perdere la portabilità) ti consiglio di riprogettare la CUI.
mi sa che in puro java non si può fare...forse con qualche chiamata nativa a funzioni c...c'è una che pulisce lo schermo...non mi ricordo il nome però:( non è standard
Non è proprio quello che cercavo ma si può fare, tanto mi serve solo per fare dei test. C'è un modo di usare i comandi DOS? Potrei usare cls... devi lanciare un'istanza di cmd.exe con questa command line:
cmd /C cls
inoltre devi lanciarla facendole ereditare la tua finestra di console, non so se questo è possibile e/o se è il comportamento di default.
wingman87
26-02-2008, 18:21
ma più che altro ritengo che il design della tua interfaccia testuale sia concettualmente errato, quindi piuttosto che usare JNI (e perdere la portabilità) ti consiglio di riprogettare la CUI.
Cosa mi consigli? Mi serve solo per fare dei test, per vedere durante l'esecuzione come cambia la matrice, solo che siccome si tratta di forse anche migliaia di passaggi avrei voluto vederlo come una specie di filmatino piuttosto che stampare mille matrici
devi lanciare un'istanza di cmd.exe con questa command line:
Così non va purtroppo :(
banryu79
27-02-2008, 07:19
Mi serve solo per fare dei test, per vedere durante l'esecuzione come cambia la matrice, solo che siccome si tratta di forse anche migliaia di passaggi avrei voluto vederlo come una specie di filmatino piuttosto che stampare mille matrici
Allora perchè invece di stampare le tue ENNE matrici prodotte direttamente nella consolle non le stampi come file di testo contenente ogni matrice stampata seguita da un comando BASH "cls" (clear screen) prima di scrivere la successiva e ogni dieci-venti (scegli tu) stampata di coppia matrice - comando "cls" postresti mettere un bel comando di "pause" (si ferma e attende la pressione di un qualunque tasto della tastiera da parte dell'utente prima di proseguire) così potresti seguire + o - comodamente l'evoluzione della tua matrice...
Metti tutto in un file di testo che salvi con l'estensione .bat e poi lo lanci con cmd.exe /C mioFile.bat oppure te lo lanci a manina dopo l'esecuzione del programma.
Esempio:
@echo off <--- disabilita la visualizzazione dei comandi in un batch (altrimenti ti mostrerebbe il prompt col comando prima di eseguirlo..)
(1° matrice)
echo xx-
echo x-x
echo --x
cls
(2° matrice)
echo x-x
echo x-x
echo --x
cls
...
(N° matrice)
echo ---
echo x--
echo xx-
pause <-- attende l'input utente per proseguire
cls
ecc....
wingman87
27-02-2008, 09:36
Allora perchè invece di stampare le tue ENNE matrici prodotte direttamente nella consolle non le stampi come file di testo contenente ogni matrice stampata seguita da un comando BASH "cls" (clear screen) prima di scrivere la successiva e ogni dieci-venti (scegli tu) stampata di coppia matrice - comando "cls" postresti mettere un bel comando di "pause" (si ferma e attende la pressione di un qualunque tasto della tastiera da parte dell'utente prima di proseguire) così potresti seguire + o - comodamente l'evoluzione della tua matrice...
Metti tutto in un file di testo che salvi con l'estensione .bat e poi lo lanci con cmd.exe /C mioFile.bat oppure te lo lanci a manina dopo l'esecuzione del programma.
Esempio:
@echo off <--- disabilita la visualizzazione dei comandi in un batch (altrimenti ti mostrerebbe il prompt col comando prima di eseguirlo..)
(1° matrice)
echo xx-
echo x-x
echo --x
cls
(2° matrice)
echo x-x
echo x-x
echo --x
cls
...
(N° matrice)
echo ---
echo x--
echo xx-
pause <-- attende l'input utente per proseguire
cls
ecc....
Sei un genio! Ora provo! Grazie!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.