VB 6.0: Anzahl Zeilen einer Textdatei

Hallo Kollegas,

für eine Statusanzeige muß ich vor Beginn der Verarbeitung einer Textdatei deren Zeilenanzahl wissen. Das Problem:
Die Textdatei besteht aus Trennzeichen, d.h. die Anzahl der Zeichen pro Zeile ist variabel so dass ich nicht´s umrechnen kann (Filegröße / AnzahlZeichen pro Zeile = Zeilenanzahl).

Wie geht man in so einem Fall vor ??

Gruß

Tom

Hallo Thomas,

folgender Artikel sollte die Lösung sein:
Quelle: http://www.aboutvb.de

Sie möchten wissen, wie viele Zeilen eine Text-Datei enthält? Zeile für Zeile beim Einlesen Zählen, Text komplett einlesen und Zeilentrenner (vbCrLf) darin zählen - das sind nicht sonderlich schnelle Methoden. Bei ersterer kostet der zeilenweise Dateizugriff die meiste Zeit. Bei letzterer sind es die InStr-Operationen in der notwendigen Schleife, die auch nicht gerade die schnellsten sind.

Mit einem kleinen Trick kommen Sie auf schnellstem Wege zum Ziel. Sie lesen die Datei komplett ein und merken sich die Länge des Strings, der den gelesenen Text enthält. Dann entfernen Sie sämtliche Zeilentrenner aus dem String. Die Differenz zwischen der neuen Länge und der alten Länge des Strings ergibt die Anzahl der Zeilen. Sollte die letzte Zeile nicht mit einem Zeilentrenner abgeschlossen gewesen sein, muss die Anzahl noch um 1 erhöht werden.

Das Entfernen der Zeilentrenner soll schneller sein, als das reine Zählen der Zeilentrenner? Ja, wenn Sie die Zeilentrenner nicht selbst entfernen, sondern die VB-Funktion Replace (seit VB 6 vorhanden) die Arbeit machen lassen. Diese ist intern ziemlich gut durchoptimiert und ackert sich schneller durch einen textlangen String, als jede selbstgeschriebene VB-Routine. Sollten Sie den eingelesenen Text noch unverändert weiterverwenden wollen, weisen Sie das Ergebnis von Replace hilfsweise einer weiteren String-Variablen zu - der an Replace übergebene Original-String bleibt unverändert. In die Funktion ZeilenZahl verpackt geht es kaum noch kompakter und schneller

Dim nFNr As Long
Dim Text As String

nFNr = FreeFile
Open DateiTxt For Binary As #nFNr
Text = Space$(LOF(nFNr))
Get #nFNr, , Text
Close #nFNr

MsgBox „Die Datei enthält " & ZeilenZahl(Text) & " Zeilen.“

'…

Function ZeilenZahl(Text As String) As Long
Dim TextLänge As Long
Dim ZeilenAnzahl As Long
Dim ExtraZeile As Integer
Dim HilfsText As String

If Right$(Text, 2) vbCrLf Then
ExtraZeile = 1
End If
TextLänge = Len(Text)
HilfsText = Replace(Text, vbCrLf, „“)
ZeilenZahl = ((TextLänge - Len(HilfsText)) \ 2) + ExtraZeile
End Function

Gruss Steffen

Hallo Steffen,

vielen vielen Dank !! Das ist genau das was ich brauche !!

Gruß aus Nürnberg

Tom