vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB621.02.07
Anzahl der Zeilen einer Textdatei schnell ermitteln

Eine Funktion, mit der sich die Anzahl der Zeilen einer Textdatei auch für große Dateien (mehrere MegaBytes) sehr schnell ermitteln lässt.

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

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:

  1. Ist die Datei kleiner als 1 MB wird der gesamte Inhalt in eine String-Variable gelesen und die Zeilenanzahl via Split-Funktion ermittelt.
  2. Bei größeren Dateien wird die Datei blockweise eingelesen und die Anzahl der Carriage-Return Zeichen (CR) ermittelt.

Ü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.235 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-2024 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