vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück
Rubrik: Dateisystem · Dateien lesen/schreiben   |   VB-Versionen: VB4, VB5, VB611.02.03
Fortschrittanzeige beim Auslesen von TEXT-Dateien

Dieser Tipp verrät, wie sich sehr leicht eine Fortschrittsanzeige beim Auslesen einer zeilenorientierten Textdatei realisieren lässt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  19.602 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Das Erstellen bzw. Auslesen von Textdateien wurde bereits mehrfach abgehandelt. Das Auslesen einer zeilenorientierten Textdatei sollte demnach keine größeren Schwierigkeiten mehr bereiten.

Handelt es sich jedoch um große Textdateien, bei denen das Auslesen eine gewisse Zeit in Anspruch nehmen kann (z.B. große Log-Files), wäre es sicherlich sinnvoll dem Anwender den aktuellen Fortschritt mitzuteilen. Sei es als ProgressBar oder auch nur als Prozentzahl.

Nun gibt es auch hierzu zahlreiche Varianten. Eine Möglichkeit wäre, zunächst die Anzahl der insgesamten Zeilen in der Datei zu ermitteln. Anschließend liest man die Textdatei zeilenweise aus, wobei man einen Zeilenzähler mitführt, um so den Fortschritt berechnen zu können:

Beispiel

Dim F As Integer
Dim nLines As Long
Dim nLine As Long
Dim sLine As String
Dim iProz As Integer
Dim sFile As String
 
' Datei, die ausgelesen werden soll
sFile = App.Path & "\MyFile.txt"
 
' zunächst Anzahl der Zeilen ermitteln
F = FreeFile
Open sFile For Input As #F
While Not Eof(F)
  Line Input #F, sLine
  nLines = nLines + 1
Wend
Close #F
 
' Datei zeilenweise auslesen und aktuellen 
' Fortschritt anzeigen
F = FreeFile
Open sFile For Input As #F
Do Until Eof(F)
  Line Input #F, sLine
 
  ' Fortschritt in Prozent
  nLine = nLine + 1
  iProz = Int(nLine / nLines * 100 + 0.5)
  lblStatus.Caption = CStr(nProz)
  DoEvents
Loop
Close #F

Das ganze funktioniert prima - aber: Muss man tatsächlich erst die Anzahl der Zeilen ermitteln, um dann später den Fortschritt anzeigen zu können?

Die Antwort lautet ganz klar: Nein!

Welche Möglichkeiten hat man sonst noch? Ich würde sagen: LOC und LOF.

LOC gibt die aktuelle Lese-Position in Bytes an. Dieser Wert muss im sequentiellen Dateimodus jedoch noch mit 128 multipliziert werden. LOF bedeutet LentghOfFile und gibt die Gesamtgröße der geöffneten Datei in Bytes zurück. Mit diesem Wissen lässt sich der Fortschritt also doch direkt beim zeilenweisen Auslesen der Textdatei berechnen.

Und so geht's

Dim F As Integer
Dim sLine As String
Dim sFile As String
Dim nSize As Long
Dim iProz As Integer
 
' Datei, die ausgelesen werden soll
sFile = App.Path & "\myFile.txt"
 
' Datei öffnen
F = FreeFile
Open sFile For Input As #F
 
' Größe der Textdatei
nSize = LOF(F)
 
' Zeilenweise auslesen und aktuellen
' Fortschritt anzeigen
Do Until EOF(F)
  Line Input #F, sLine
 
  ' Fortschritt in Prozent
  iProz = Int(Loc(F) * 128 / nSize * 100 + 0.5)
  lblStatus.Caption = CStr(iProz) & "%"
  DoEvents
 
  ' ... hier der restliche Code
Loop
 
' Datei schließen
Close #F

Dieser Tipp wurde bereits 19.602 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2021 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel