Datei abschnittsweise durchsuchen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Hans1405.

    Datei abschnittsweise durchsuchen

    Hallo,

    ich habe eine Datei, die ich mit

    VB.NET-Quellcode

    1. Dim reader As New FileStream(datei, FileMode.OpenOrCreate, _FileAccess.ReadWrite)
    2. Dim r As StreamReader = New StreamReader(reader)
    3. r.BaseStream.Seek(0, SeekOrigin.Begin)
    4. While r.Peek() > -1
    5. ...


    einlese. Diese Datei hat eine Struktur, ähnlich folgender:

    Brainfuck-Quellcode

    1. http://irgendwas.halt
    2. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
    3. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    4. Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    5. Accept-Encoding: gzip, deflate
    6. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    7. Connection: keep-alive
    8. HTTP/1.1 301 Moved Permanently
    9. Date: Tue, 24 Jan 2012 14:24:03 GMT
    10. Server: Apache/2.2.16 (Debian)
    11. Vary: Accept-Encoding
    12. Content-Encoding: gzip
    13. Content-Length: 281
    14. Content-Type: text/html; charset=iso-8859-1
    15. Connection: keep-alive----------------------------------------------------------usw.


    . Das ist z.B. ein "Absatz" von vielen. Nun will ich, die Zeile nach der Begrenzung ("----...") auslesen und eine bestimmte Zeile, die danach kommt, also z.B. "Vary". Wie kann ich das am geschickstesten anstellen?

    Danke schon mal!
    Gruß Hans!


    Edit by Dodo:
    -> Code leserlich dargestellt

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

    Du kannst mio System.IO.File.ReadAllLines(DATEI) alle Zeilen der Datei auslesen, dann suchst Du in den Zeilen die Startzeile und nimmst die nächste.
    Oder Du liest die Datei zeilenweise ein (System.IO.StreamReader.ReadLine()) und verfährst ebenso.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dazu gibts den sog. Boundary im Header, das sozusagen ein Limiter, anhand dessen man den gesamten Header unterteilen kann.

    Es gibt eine Variable im Header die etwa so aussehen sollte:

    Brainfuck-Quellcode

    1. Content-Type: [irgendein Typ hier]; boundary=---------------------------634345435345435 [irgendwelche Nummern oder zahlenfolgen]


    im weiteren Stream werden Variablen oder andere Daten mit diesem Boundary getrennt

    Brainfuck-Quellcode

    1. -----------------------------634345435345435
    2. Content-Disposition: form-data; name="hallo"
    3. irgendein text
    4. -----------------------------634345435345435
    5. Content-Disposition: form-data; name="foo"
    6. irgendein bar
    7. -----------------------------634345435345435--


    so sähe z.B. ein POST Header aus wo die einzelnen Variablen übermittelt werden.
    Danke für die schnellen Antworten!
    @Dodo: Die Datei oben, war nur ein Beispiel. Die Datei kann auch anders aussehen, aber eins ist immer gleich: ------ am Schluß
    @RodFromGermany: Ich bin recht neu in Vb.net (allgemein, fang ich erst an mit Programmierung), magst du mir vielleicht ein Beispiel geben?
    Normal sollte aber ein HTTP Stream auch immer so aussehen. Wobei ich mich bisher nur mit dem zusammenstellen von POST Headern beschäftigt habe. Aber es sollte eigentlich ein Boundary geben anhand dessen der Server die Informationen sauber trennen kann.
    Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim lines() As String = System.IO.File.ReadAllLines("DEINE_DATEI")
    4. Dim line As String
    5. For i As Integer = 0 To lines.Length - 1
    6. line = lines(i)
    7. If line.StartsWith("--------------") Then
    8. TueEtwas(lines(i + 1))
    9. End If
    10. Next
    11. End Sub
    12. Private Sub TueEtwas(ByVal txt As String)
    13. MessageBox.Show(txt)
    14. End Sub
    15. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    16. Dim line As String
    17. Using sr As New System.IO.StreamReader("DEINE_DATEI")
    18. line = sr.ReadLine
    19. If line.StartsWith("--------------") Then
    20. TueEtwas(sr.ReadLine)
    21. End If
    22. End Using
    23. End Sub
    24. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!