Programmazione > Progetti degli utenti
ProgressBar per terminale
(1/1)
milio:
Ciao a tutti.... Mi sono imbattuto in questi giorni in un progetto per l'aggiornamento di tabelle su database postgresql con sorgente remoto su database firebird.
Siccome ho utilizzato un port forwarding con ssh e avendo una connessione (in questo caso nella nostra sede in Francia) molto lenta, ho creato questo piccolo componente per verificare che il programma stesse lavorando oppure no.
Naturalmente ci ho messo piu' tempo a documentarmi per sviluppare il progress bar per terminale che non la procedura di estrazione dati, come dire 'unire l'inutile al dilettevole' :rotfl:
Gianluigi:
Scaricato, grazie :)
vuott:
...io m'ero inventato una cosa così: :-X
--- Codice: ---
Private Const LUNGHEZZA As Byte = 50
Public Sub Main()
Dim b, c As Byte
For b = 1 To LUNGHEZZA
Inc c
Write "\r" & String(b, "=") & "]" & Space(LUNGHEZZA + 1 - b) &
CStr(c * (100 / LUNGHEZZA)) & "%"
Flush
Wait 0.1
Next
End
--- Termina codice ---
Se si vuole avere un effetto grafico di barra "alla Milio ", la riga con la funzione "Write" dovrà essere cambiata così:
--- Codice: ---
Write "\r\e[42m" & Space(b) & "\e[0m" & Space(51 - b) & CStr(c * (100 / LUNGHEZZA)) & "%"
--- Termina codice ---
milio:
Flush!!!!!!! Era Flush!!!!! Ecco perche' non mi scriveva nel terminale..... GRAZIE Vuott!!!!!!! :ok: :ok: :ok: :ok: :ok:
Allego inutilità corretta....
vuott:
...ecco comunque un esempio pratico, nel si mostrerà lo stato d'avanzamento in percentuale della copia di un file:
--- Codice: ---
Private Const LUNGHEZZA As Byte = 50
Public Sub Main()
Dim fl1, fl2 As File
Dim b, c As Byte
Dim k As Integer
Dim orig, s As String
orig = "/percorso/del/file/da/copiare"
fl1 = Open "/tmp/copia" For Create ' Percorso ove ad esempio il file verrà copiato
fl2 = Open orig For Read
k = (Lof(fl2) \ 100)
c = 100 \ LUNGHEZZA
Repeat
Inc b
If b < 101 Then
Write "\r" & String(b \ c, "=") & "]" &
Space(LUNGHEZZA + 1 - (b \ c)) & CStr(b) & "%"
Flush
Endif
Read #fl2, s, -k
Write #fl1, s, -k
Until Eof(fl2)
fl2.Close
fl1.Close
If Stat("/tmp/copia").Size == Stat(orig).Size Then Print "\nCopia del file avvenuta con successo."
End
--- Termina codice ---
Navigazione
[0] Indice dei post
Vai alla versione completa