Rubrik: Dateisystem · Dateien lesen/schreiben | VB-Versionen: VB4, VB5, VB6 | 10.02.04 |
Letzte Zeile(n) aus einer Datei ermitteln Dieser Tipp zeigt, wie sich die letzte oder x-letzte Zeile einer beliebig großen Textdatei auslesen lässt. | ||
Autor: Tim Sporleder | Bewertung: | Views: 22.413 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Hin und wieder muss man eine Datei "rückwärts" auslesen, bzw. möchte die letzte oder zweitletzte Zeile einer großen Textdatei ermitteln.br>Leider bietet VB keine Möglichkeit direkt anzugeben, eine Textzeile beginnend beim Dateiende (also von hinten anfangend) auszulesen.
Mit nachfolgender Funktion ist das aber jetzt möglich.
Beispiel:
Es soll aus einer LOG-Datei die x. letzte Zeile ausgelesen werden.
Erstellen Sie ein neues Projekt, platzieren auf die Form zwei TextBox-Controls (Text1 und Text2), sowie einen CommandButton. In die erste TextBox wird angegeben, welche Zeile ausgelesen werden soll. 0 bedeutet hierbei die letzte Zeile, 1 die vorletzte Zeile, 2 die drittletzte Zeile usw. Beim Klick auf den CommandButton wird die gewünschte Zeile dann in der 2. TextBox angezeigt.
Aufruf:
Private Sub Command1_Click() Text2.Text = ReadLastLine(App.Path & "\" & "MyFile.log", _ True, Val(Text1.Text)) End Sub
Fügen Sie jetzt noch nachfolgende Funktion ein:
' Bestimmte Zeile einer Textdatei auslesen ' (vom Dateiende beginnend) Public Function ReadLastLine(sFileName As String, _ ByVal bTrimNullString As Boolean, _ Optional ByVal XteLastLine As Long = 0) As String On Error Resume Next Dim F As Integer Dim nFileLen As Long Dim sTempCR As String * 1 Dim sTempLF As String * 1 ' Datei öffnen F = FreeFile Open sFileName For Binary Access Read As #F ' Dateigröße nFileLen = LOF(F) ' x. letzte Zeile lesen Do Until XteLastLine < 0 ReadLastLine = "" Do ' Solange zeilenweise "rückwärts" einlesen, bis ' gewünschte Zeile gefunden Do ' Zeichen lesen nFileLen = nFileLen - 1 Get #F, nFileLen, sTempCR If Err.Number <> 0 Then ' im Fehlerfalle Prozedur verlassen Close #F ReadLastLine = "" Exit Function End If ' Wenn es sich um CR handelt... If sTempCR = vbCr Then ' Prüfen, ob Zeichen davor = LF Get #F, nFileLen + 1, sTempLF If sTempLF = vbLf Then ' innere Schleife beenden Exit Do End If End If If sTempCR <> vbCr And sTempCR <> vbLf Then ' Zeichen in Rückgabewert speichern ReadLastLine = sTempCR & ReadLastLine End If Loop If Not bTrimNullString Or Len(Trim$(ReadLastLine)) > 0 Then Exit Do Loop XteLastLine = XteLastLine - 1 Loop ' Datei schließen Close #F End Function
Kurze Erläuterung:
Im ersten Parameter übergibt man der Routine die Datei