Desöfteren wurde ich schon gefragt, wie man schnell die Anzahl der Zeilen einer Textdatei ermitteln kann. Viele User gehen hierbei den "einfachsten" Weg, indem Sie die Textdatei öffnen und zeilenweise auslesen, wobei Sie eine Zählvariable mitführen: Dim F As Integer Dim nLines As Long Dim sLine As String F = FreeFile Open "d:\test.txt" For Input As #F While Not EOF(F) Line Input #F, sLine nLines = nLines + 1 Wend Close #F Die Methode funktioniert zwar zuverlässig, benötigt für große Dateien mit mehreren MegaBytes an Daten jedoch "zu viel" Zeit. Nachfolgend möchte ich eine "Universalroutine" vorstellen, mit der sich die Anzahl der Zeilen um ein Vielfaches schneller ermitteln lässt. In der Funktion sind zwei Varianten vorgesehen:
Über den optionalen Parameter können Sie die zu anzuwendende Variante auch selbst vorgeben, indem Sie hier den Wert 1 bzw. 2 übergeben. ' Anzahl Zeilen einer Textdatei ermitteln Public Function GetLineCount(ByVal sFile As String, Optional ByVal Variante As Long = 0) As Long Dim F As Integer Dim sBuffer As String Dim nLines As Long Dim nFileLen As Long Dim nPos As Long ' Blockgröße: 4 KB Const BlockSize As Long = 4096 F = FreeFile Open sFile For Binary Access Read Shared As #F ' je nach Größe der Datei, entweder Variante 1 ' oder Variante 2 verwenden If (FileLen(sFile) / 1024 < 1024 And Variante = 0) Or (Variante = 1) Then ' bis 1 MB, Datei in einem Rutsch verarbeiten sBuffer = Space$(LOF(F)) Get #F, , sBuffer nLines = UBound(Split(sBuffer, vbCrLf)) Else ' Variante 2 ' ab 1 MB, Datei blockweise verarbeiten sBuffer = Space$(BlockSize) nFileLen = LOF(F) While nFileLen > 0 If nFileLen > BlockSize Then Get #F, , sBuffer nFileLen = nFileLen - BlockSize Else sBuffer = Space$(nFileLen) Get #F, , sBuffer nFileLen = 0 End If nPos = 0 Do nPos = InStr(nPos + 1, sBuffer, Chr$(13)) If nPos > 0 Then nLines = nLines + 1 Loop Until nPos = 0 Wend End If Close #F GetLineCount = nLines End Function Dieser Tipp wurde bereits 24.264 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
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. |