Datei von hinten Lesen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Datei von hinten Lesen

    Hallo zusammen,

    es scheint als stehe ich auf dem Schlauch bzw. stelle mich zu blöde an.

    Ich möchte gerne eine Textdatei von hinten lesen!
    Also von unten nach oben ^^
    Wahrscheinlich würde es auch reichen wenn ich nur die letzte Zeile ausgegeben bekomme.

    Wäre für Denkanstöße dankbar :)

    Danke
    Gruß Horschti

    Horschti schrieb:

    Wäre für Denkanstöße dankbar

    Stream.Seek()

    zb:

    VB.NET-Quellcode

    1. Dim s As New Stack(Of Integer)
    2. Using fs As New System.IO.FileStream("dummy.txt", IO.FileMode.Open)
    3. Dim i As Integer = 0
    4. Dim b As Integer
    5. Do
    6. fs.Seek(i, IO.SeekOrigin.End)
    7. b = fs.ReadByte()
    8. If b = 13 Then Exit Do
    9. ' ascii only:
    10. If b >= 32 AndAlso b <= 127 Then s.Push(b)
    11. i -= 1
    12. Loop
    13. End Using
    14. Dim sb As New System.Text.StringBuilder
    15. While s.Count > 0
    16. sb.Append(Chr(s.Pop))
    17. End While
    18. Debug.Print(sb.ToString)


    dummy.txt:
    Hello World
    Joe the ape
    Franky the fish


    Output: Franky the fish

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    Super Sache, Vielen Dank!

    Aber anscheinend verstehe ich den Code noch nicht ganz, sonst würde ich es hinbekommen das er mir die Vorletzte Zeile ausgibt....In der Letzten steht nämlich nix drin ^^ (hab ich aber jetzt erst mitbekommen)

    Trotzdem Danke!

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim s As New Stack(Of Integer)
    3. Dim linenum As Integer = 2 ' counted from back!
    4. Using fs As New System.IO.FileStream("dummy.txt", IO.FileMode.Open)
    5. Dim i As Integer = 0
    6. Dim b As Integer
    7. Do
    8. fs.Seek(i, IO.SeekOrigin.End)
    9. b = fs.ReadByte()
    10. If b = 13 Then
    11. linenum -= 1 ' decrement line counter
    12. If linenum = 0 Then
    13. Exit Do ' finished
    14. Else
    15. s.Clear() ' delete the last line
    16. End If
    17. End If
    18. ' ascii only:
    19. If b >= 32 AndAlso b <= 127 Then s.Push(b)
    20. i -= 1
    21. Loop
    22. End Using
    23. Dim sb As New System.Text.StringBuilder
    24. While s.Count > 0
    25. sb.Append(Chr(s.Pop))
    26. End While
    27. Debug.Print(sb.ToString)
    28. End Sub


    output: Joe the ape