Differenze tra le versioni di "Pseudo-ProgressBar in un'applicazione 'a riga di comando'"
Da Gambas-it.org - Wikipedia.
(9 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Se si scrivendo un'applicazione ''a riga di comando'' (quindi senza supporto grafico), evidentemente <SPAN Style="text-decoration:underline">non</span> sarà possibile utilizzare | + | Se si scrivendo un'applicazione ''a riga di comando'' (quindi senza supporto grafico), evidentemente <SPAN Style="text-decoration:underline">non</span> sarà possibile utilizzare il Controllo grafico ''ProgressBar''. |
+ | <BR>Per ottenere, allora, in console/Terminale un ''effetto'' simile a una ''ProgressBar'', può essere utilizzata una soluzione, che adopera ovviamente caratteri, simile alla seguente: | ||
+ | <FONT Color=gray>' ''La Costante "LUNGHEZZA" imposta la lunghezza della pseudo-progressbar che sarà mostrata nella console/terminale.'' | ||
+ | ' ''E' la quantità di caratteri stampati nella console/terminale.''</font> | ||
Private Const LUNGHEZZA As Byte = 50 | Private Const LUNGHEZZA As Byte = 50 | ||
− | + | Public Sub Main() | |
Dim b, c As Byte | Dim b, c As Byte | ||
Riga 9: | Riga 12: | ||
For b = 1 To LUNGHEZZA | For b = 1 To LUNGHEZZA | ||
Inc c | Inc c | ||
− | Write "\r" & String(b, "=") & "]" & Space(LUNGHEZZA + 1 - b) & CStr(c * (100 / LUNGHEZZA)) & "%" | + | Write "\r" & String(b, "=") & "]" & Space(LUNGHEZZA + 1 - b) & |
+ | CStr(c * (100 / LUNGHEZZA)) & "%" | ||
Flush | Flush | ||
Wait 0.1 | Wait 0.1 | ||
Next | Next | ||
− | + | End | |
Se si vorrà avere l'effetto di una barra colorata (in verde), la riga con la funzione "Write" dovrà essere cambiata così: | 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 | + | 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 | + | Private Const LUNGHEZZA As Byte = 50 |
− | + | ||
− | + | ||
+ | Public Sub Main() | ||
Dim fl1, fl2 As File | Dim fl1, fl2 As File | ||
Dim b, c As Byte | Dim b, c As Byte | ||
Dim k As Integer | Dim k As Integer | ||
− | Dim orig, s As String | + | Dim orig, copia, s As String |
+ | Dim tmp As Date | ||
− | orig = "<FONT Color=gray> | + | orig = "<FONT Color=gray>''/percorso/del/file/da/copiare''</font>" |
− | + | <FONT Color=gray>' ''Percorso ove ad esempio il file verrà copiato:''</font> | |
+ | copia = "/tmp/copia." & File.Ext(orig) | ||
+ | |||
+ | fl1 = Open copia For Create | ||
fl2 = Open orig For Read | fl2 = Open orig For Read | ||
k = (Lof(fl2) \ 100) | k = (Lof(fl2) \ 100) | ||
c = 100 \ LUNGHEZZA | c = 100 \ LUNGHEZZA | ||
+ | |||
+ | tmp = Now | ||
Repeat | Repeat | ||
Inc b | Inc b | ||
− | If b < 101 Then | + | If b < 101 Then |
− | Write "\r" & | + | Write "\r\e[42m" & Space(b \ c) & "\e[0m" & |
− | + | Space(LUNGHEZZA + 1 - (b \ c)) & CStr(b) & "%" | |
Flush | Flush | ||
Endif | Endif | ||
Riga 46: | Riga 57: | ||
Until Eof(fl2) | Until Eof(fl2) | ||
+ | Print "\n\n\e[31m"; CStr(Time(0, 0, 0, DateDiff(tmp, Now, gb.Millisecond))) | ||
fl2.Close | fl2.Close | ||
fl1.Close | fl1.Close | ||
− | If Stat("/tmp/ | + | If Stat("/tmp/copia").Size == Stat(orig).Size Then Print "\n\e[0mCopia del file avvenuta con successo." |
− | + | End |
Versione attuale delle 10:30, 28 nov 2023
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