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