vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Dateien lesen/schreiben   |   VB-Versionen: VB4, VB5, VB610.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 SporlederBewertung:     [ Jetzt bewerten ]Views:  22.382 
ohne HomepageSystem:  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 . Möchten Sie keine leeren Zeilen auswerten (am Ende der Datei könnten unter Umständen mehrere Leerzeilen stehen, die Sie aber nicht auswerten möchten), legen Sie für den 2. Parameter TRUE fest. Optional kann noch angegeben werden, die wievielte Zeile vom Dateiende beginnend ausgelesen werden soll. Geben Sie hier keinen Wert an bzw. die Zahl "0", wird immer die letzte Zeile der Datei ausgelesen.
 

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