Pseudo-ProgressBar in un'applicazione 'a riga di comando'
Vai alla navigazione
Vai alla ricerca
Se si scrivendo un'applicazione a riga di comando (quindi senza supporto grafico), evidentemente non sarà possibile utilizzare il Controllo grafico ProgressBar.
Per ottenere, allora, in console/Terminale un effetto simile a una ProgressBar, può essere utilizzata una soluzione, che adopera ovviamente caratteri, simile alla seguente:
' La Costante "LUNGHEZZA" imposta la lunghezza della pseudo-progressbar che sarà mostrata nella console/terminale.
' E' la quantità di caratteri stampati nella console/terminale.
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
Se si vorrà avere l'effetto di una barra colorata (in verde), la riga con la funzione "Write" dovrà essere cambiata così:
Write "\r\e[42m" & String(b, " ") & "\e[0m" & Space(LUNGHEZZA + 1 - b) & CStr(c * (100 / LUNGHEZZA)) & "%"
Di seguito mostriamo un esempio pratico, nel quale si mostrerà lo stato d'avanzamento in percentuale della copia di un file. Al termine sarà mostrato anche il tempo impiegato.
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, copia, s As String
Dim tmp As Date
orig = "/percorso/del/file/da/copiare"
' Percorso ove ad esempio il file verrà copiato:
copia = "/tmp/copia." & File.Ext(orig)
fl1 = Open copia For Create
fl2 = Open orig For Read
k = (Lof(fl2) \ 100)
c = 100 \ LUNGHEZZA
tmp = Now
Repeat
Inc b
If b < 101 Then
Write "\r\e[42m" & Space(b \ c) & "\e[0m" &
Space(LUNGHEZZA + 1 - (b \ c)) & CStr(b) & "%"
Flush
Endif
Read #fl2, s, -k
Write #fl1, s, -k
Until Eof(fl2)
Print "\n\n\e[31m"; CStr(Time(0, 0, 0, DateDiff(tmp, Now, gb.Millisecond)))
fl2.Close
fl1.Close
If Stat("/tmp/copia").Size == Stat(orig).Size Then Print "\n\e[0mCopia del file avvenuta con successo."
End