VB 5/6-Tipp 0611: Schnell die Anzahl der Zeilen in einer Textdatei zählen
von Peter K. Sauer
Beschreibung
Um die Anzahl der Zeilen einer Textdatei festzustellen, ist ein Auslesen der Datei unumgänglich. Gleichwohl kann der Vorgang erheblich beschleunigt werden, wenn die Datei in Blöcken ausgelesen wird. Damit können auch große Files in akzeptabler Zeit analysiert werden
Schwierigkeitsgrad: | Verwendete API-Aufrufe: keine | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Projekt1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Textfeld "Text1" ' Steuerelement: Schaltfläche "Command1" '-------------------------------------------------------------------- ' Zeilen aus einer Textdatei auslesen peter.k.sauer@web.de ' ' um die Anzahl der Zeilen einer Textdatei festzustellen, ist ein ' Auslesen der Datei unumgänglich. Gleichwohl kann der Vorgang ' erheblich beschleunigt werden, wenn die Datei in Blöcken aus- ' gelesen wird. Damit können auch grosse Files in akzeptabler Zeit ' analysiert werden '--------------------------------------------------------------------- Option Explicit Private Sub Command1_Click() 'Beispiel für eine praktische Anwendung Dim Path As String Dim z As Long Path = Text1 Me.MousePointer = vbHourglass z = GetLinesFromTextFile(Path) Me.MousePointer = vbDefault MsgBox z & " Zeilen" End Sub Public Function GetLinesFromTextFile(Path As String) As Long 'zählt die LinesCount einer Textdatei, die Datei muss vorhanden sein Dim FNr As Integer Dim FileLength As Double Dim BytesRead As Double Dim ByteToRead As Long Dim s As String Dim LinesCount As Long 'ist die Datei leer If FileLen(Path) = 0 Then Exit Function End If 'Block zum Auslesen, 64K ByteToRead = 256& * 256& 'eine Pipe zuweisen FNr = FreeFile 'Datei binär öffnen Open Path For Binary As #FNr 'Dateilänge feststellen FileLength = LOF(FNr) 'Blockweise auslesen Do If FileLength = BytesRead Then 'alles ausgelesen Exit Do ElseIf (FileLength - BytesRead) < ByteToRead Then 'den letzten Rest bestimmen ByteToRead = FileLength - BytesRead End If 'Variable bereitstellen in Blockgrösse s = Space(ByteToRead) 'Block einlesen Get #FNr, BytesRead + 1, s 'LinesCount in Subroutine feststellen LinesCount = LinesCount + GetLinesFromString(s) 'wie weit wurde bereits eingelesen BytesRead = BytesRead + ByteToRead Loop 'der Zähler muss um 1 erhöht werden LinesCount = LinesCount + 1 'war das letzte Zeichen ein Trenner ? s = Space(1) Get #FNr, FileLength, s If s = Chr(10) Then 'ja, letzte Zeile nicht gefüllt LinesCount = LinesCount - 1 End If Close FNr 'Wert an Function GetLinesFromTextFile = LinesCount End Function Private Function GetLinesFromString(s As String) ' Zeilenumbrüche in einem String zählen, ' es wird nur der LineFeed ausgewertet Dim i As Long, j As Long, z As Long i = 1 Do 'suche nach Zeilentrenner j = InStr(i, s, Chr(10)) If j = 0 Then 'nix (mehr) da Exit Do End If 'add z = z + 1 'neue Position i = j + 1 Loop 'Wert an Function GetLinesFromString = z End Function '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 6 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Junior am 13.01.2009 um 16:06
Private Function GetLinesFromString(s As String)
' Zeilenumbrüche in einem String zählen,
' es wird nur der LineFeed ausgewertet
GetLinesFromString = Len(s) - Len(Replace(s, Chr(10), ""))
End Function
Kommentar von Knurzel am 16.07.2005 um 19:05
..ok habs jetzt schon so gelößt:
Function fncZeilen(ByVal strFile As String) As Long
Dim fsoObject As Scripting.FileSystemObject
Dim tsrLineCount As Scripting.TextStream
fsoObject = CreateObject("Scripting.FileSystemObject")
fncZeilen= 0
tsrLineCount = fsoObject.OpenTextFile(strFile, Scripting.IOMode.ForReading, True)
Do While Not tsrLineCount.AtEndOfStream
tsrLineCount.ReadLine()
fncZeilen = fncZeilen+ 1
Loop
End Function
Kommentar von Knurzel am 16.07.2005 um 18:11
..hat jemand das schon vb.net fähig gemacht?
Kommentar von Chief Justice am 10.11.2004 um 10:43
Super
Kommentar von Filip am 27.10.2004 um 10:38
Funktioniert Super!
Kommentar von Moritz am 01.04.2004 um 17:44
hat sehr gut geklappt ;)