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