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
 |
Die VB-Funktion Replace schlägt jeden
handgemachten VB-Code - mit der Funktion ZeilenZahl können
Sie sich das manuelle Zählen der Zeilen einer Textdatei
ersparen

|

|