Differenze tra le versioni di "Pseudo-ProgressBar in un'applicazione 'a riga di comando'"

Da Gambas-it.org - Wikipedia.
Riga 17: Riga 17:
 
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" & Space(b) & "\e[0m" & Space(LUNGHEZZA + 1 - b) & CStr(c * (100 / LUNGHEZZA)) & "%"
 
   Write "\r\e[42m" & Space(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:
 +
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 = "<FONT Color=gray>' ''/percorso/del/file/da/copiare''</font>"
 +
 +
  fl1 = Open "<FONT Color=gray>' ''/percorso/ove/il/file/verrà/copiato''</font>"" For Create
 +
  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/zzz").Size == Stat(orig).Size Then Print "\nCopia del file avvenuta con successo."
 +
 +
'''End'''

Versione delle 15:51, 21 gen 2022

Se si scrivendo un'applicazione a riga di comando (quindi senza supporto grafico), evidentemente non sarà possibile utilizzare l'oggetto grafico ProgressBar. Per ottenere, allora, in console/Terminale un effetto simile ad una ProgressBar, può essere utilizzata una soluzione, che adopera ovviamente caratteri, simile alla seguente:

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" & Space(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: 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 "' /percorso/ove/il/file/verrà/copiato"" For Create 
 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/zzz").Size == Stat(orig).Size Then Print "\nCopia del file avvenuta con successo."

End