VBA Tipp: ASCII-Zeichen in Datei zählen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Effizient ermitteln, wie oft ein bestimmtes ASCII-Zeichen in einer Datei vorkommt.

Lösung

Das leistet die folgende Funktion:

Public Function CountChar(FileName As String, _
                          Optional ByVal LookupChar As Byte = 10) As Long
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Const BUF_SIZE        As Long = 4096
 
   Dim buf(BUF_SIZE - 1) As Byte
   Dim bufLen            As Long
   Dim fNum              As Integer
   Dim remainingBytes    As Long
   Dim i                 As Long
 
   fNum = FreeFile()
   Open FileName For Binary Access Read As fNum
   remainingBytes = LOF(fNum)
 
   Do
      bufLen = remainingBytes
      If bufLen > BUF_SIZE Then _
         bufLen = BUF_SIZE
      remainingBytes = remainingBytes - bufLen
 
      Get fNum, , buf
      For i = 0 To bufLen - 1
         If buf(i) = LookupChar Then _
            CountChar = CountChar + 1
      Next
   Loop Until remainingBytes <= 0
 
   Close fNum
 
End Function

Aufruf

Um die Zahl der Zeilenenden LF (Line Feeds) zu ermitteln:

   Debug.Print CountChar("C:\einVerzeichnis\eineDatei.txt")

oder, um die Zahl der Seitenvorschübe FF (Form Feeds) festzustellen:

   Debug.Print CountChar("C:\einVerzeichnis\eineDatei.prn", Asc(vbFormFeed))