vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück
Rubrik: Dateisystem · Dateien lesen/schreiben   |   VB-Versionen: VB4, VB5, VB604.10.06
Anzahl Zeilen einer (Text-)Datei schnell ermittelt

Mit dieser Funktion lässt sich die Anzahl der Zeilen einer beliebigen (Text-)Datei schnell ermitteln.

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

Benötigt man die Information, wieviele Zeilen in einer beliebigen (Text-)Datei gespeichert sind, gibt es verschiedene Möglichkeiten dies "herauszufinden".

1. Möglichkeit
Man öffnet die Datei sequentiell und liest eine Zeile nach der anderen aus der Datei aus:

Public Function FileLineCount(ByVal sFile As String) As Long
  Dim F As Integer
  Dim sLine As String
  Dim nCount As Long
 
  ' Datei sequentiell öffnen und zeilenweise auslesen  
  F = FreeFile
  Open sFile For Input As #F
  While Not EOF(F)
    Line Input #F, sLine
    nCount = nCount + 1
  Wend
  Close #F
 
  FileLineCount = nCount
End Function

Handelt es sich bei der Datei mit wenigen Zeilen, ist obiger Code was die Performance betrifft völlig ausreichend. Was aber, wenn in der Datei mehrere hundertausend Zeilen gespeichert sind oder noch mehr?

In diesem Fall sollte man die Datei blockweise im Binary-Mode auslesen und die im gelesenen "Block" enthaltenen Zeilenumbruchzeichen zählen.

2. Möglichkeit
Inhalt der Datei blockweise "verarbeiten" und gezielt nach Zeilenumbruchzeichen suchen.

Public Function FileLineCount(ByVal sFile As String) As Long
  Dim F As Integer
  Dim nCount As Long
  Dim sBuffer As String
  Dim nFilePos As Long
  Dim nSize As Long
  Dim nBytes As Long
  Dim nPos As Long
 
  ' Blockgröße
  Const nBlockSize = 16384
 
  ' Datei im Binary-Mode öffnen
  F = FreeFile
  Open sFile For Binary As #F
 
  ' Datei blockweise auslesen
  nSize = LOF(F)
  nFilePos = 0
  Do While nFilePos < nSize
    nBytes = nBlockSize
    If nFilePos + nBytes > nSize Then nBytes = nSize - nFilePos
 
    ' Inhalt lesen
    sBuffer = Space$(nBytes)
    Get #F, , sBuffer
 
    ' Zeilenumbrüche zählen
    nPos = 0
    Do
      nPos = InStr(nPos + 1, sBuffer, Chr$(13))
      If nPos > 0 Then nCount = nCount + 1
    Loop Until nPos = 0
    nFilePos = nFilePos + nBytes
  Loop
  Close #F
 
  FileLineCount = nCount
End Function

Wenn man jetzt einmal die "Arbeitszeit" beider Funktion miteinander vergleicht, stellt man fest, dass der Code der 2. Variante deutlich schneller arbeitet - auch bei kleineren Dateien.
 

Dieser Tipp wurde bereits 30.549 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-2021 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