Newsgroup: it.comp.java
Titolo: Progress bar su riga di comando

Buongiorno a tutti.
Desidereri fare una sorta di progress bar su riga di comando.
Come quelle che su facevano con il vecchio dos.
Vorrei ottenere un'output come il seguente
0% [---------------------------] 100% (0%)
e poi man mano che la procedura avanza, questa riga cambia del tipo
0% [++++++++-------------------] 100% (30%)
La riga non deve essere aggiunta in coda (banale println) ma deve andare
a sostituire la vecchia. Ho spulciato un po' la documentazione ma non ne
sono venuto a capo.
Sapete se si può fare o abbandono l'idea?
Ciao e grazie D.
Inviato da 
www.mynewsgate.net

Ciao, getting_out!
Il giorno 22/03/2004 alle ore 17:28 hai scritto:
 go> La riga non deve essere aggiunta in coda (banale println) ma deve
 go> andare a sostituire la vecchia. Ho spulciato un po' la documentazione
 go> ma non ne sono venuto a capo.
 go>
 go> Sapete se si puņ fare o abbandono l'idea?
Tipo magari System.out.print("[----lamiabarra----]\r"), come si faceva in
DOS appunto ?
Bye
-- 
Marco Maccaferri
MaccaSoft - 
http://www.maccasoft.com

 Tipo magari System.out.print("[----lamiabarra----]\r")
Si, però immagino che su MacOS funzioni come un println. Non credo sia
portabilissimo. E d'altra parte non saprei come altro fare :)
Ciao
Matteo
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it

 DOS appunto ?
Scusa è il flag \r che fa scrivere sempre sulla stessa riga giusto? Fa 
semplicemente un carriage return.
Che idiota a non averci pensato prima. A volte si avanno a cercare le 
soluzioni su chissà quali pianeti quando le abbiamo sotto il naso ;)
Ciao e grazie D.

 portabilissimo. E d'altra parte non saprei come altro fare :)
E' vero. Cappero su anche in Linux un carattere 13 manda a capo... 
Adesso faccio un po' di prove in diretta
Ciao D.


Appena provato su Linux con eclipse.
System.out.print("aaaa\r");
System.out.print("bb\n");
System.out.print("done\n");
Quando viene eseguito in eclipse, la console di questi si comporta come 
println, mentre se eseguito da bash tutto funziona correttamente.
Ciao e grazie D.

 println, mentre se eseguito da bash tutto funziona correttamente.
Il che comunque conferma la scarsa portabilità :(


 ha scritto:

Non è molto elegante ma potresti fare così:
crei uno StringBuffer riempito da tanti \b quanti sono i caratteri
iniziali della barra, e nel ciclo stampi la barra e quindi lo stringbuffer.
Visto però che stampi anche la percentuale, passando dal 9 al 10% (e dal
99 al 100%) la barra aumenterà di lunghezza (presumibilmente di 1). Quindi
,nel ciclo, se la lunghezza della barra è maggiore di quella dello
StringBuffer appendi a quest'ultimo tante \b quante la differenza tra le
due lunghezze.
Inviato da 
www.mynewsgate.net

 sono venuto a capo.
Ti serve sapere il tipo di terminale, e usarne i caratteri di controllo.
Con un terminale "standard" non e' possibile, dato che in genere offre solo 
a capo, ritorno di carrello, tab e poco altro: tieni presente che l'idea di 
terminale nasce da cose come stampanti a linee. :-)
Un terminale abbastanza portabile e' quello ANSI - anche il command line di 
windows dovrebbe supportarlo (anche se probabilmente non di default). Le 
relative sequenze di escape (che trovi con google) ti permettono tra le 
altre cose di riposizionare il cursore dove vuoi.
-- 
You dont know what to do when you dont know what you're doing.
http://space.tin.it/computer/csadun

Non so fino a che punto ti devi spingere come features, ma prova a dare 
un'occhiata qui:
http://www.pitman.co.za/projects/charva/index.html
Semplice e geniale...
-- 
                 ''~``
                ( o o )
+---------.oooO--(_)--Oooo.----+
 
http://www.jroller.com/page/megadix/
 
http://www.mict.it/

 Sapete se si può fare o abbandono l'idea?
Certo che si può fare. Invece di usare println() che equivale a
print("\r\n") usa: print('\r') che ritorna a capo senza andare a riga
sotto. Poi scrivi quello che devi. L'ho già fatto e funziona.
-- 
Pietro	- 
http://vuvuvu.pietroweb.tk
Linux Registered User #304991
Powered by *Mandrake GNU/Linux 9.2*

 altre cose di riposizionare il cursore dove vuoi.
Stamane sono un po' rinco. Cosa è che dovrei cercare con google? Le
sequenze di escape dei terminali ANSI? 
Diciamo che le compatibilità imminenti che mi interessano al momento sono
bash e winzoz. :)
Ciao D.
Inviato da 
www.mynewsgate.net

 sequenze di escape dei terminali ANSI? 
Si'. Anzi, gia' che ci sei ti conviene cercare qualche classe di supporto 
gia' fatta in Java. ;)
Inoltre, devi abilitare i servizi di terminale ANSI nel terminale che usi 
(bash, su che? Linux? Solaris? AIX? HP-UX?). Ad esempio, una volta, si 
faceva con ANSI.SYS nella configurazione di MSDOS/Windows.
