Datei in unbekannter Formatierung einlesen und Zeilenweise in Listbox ausgeben

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von xored.

    Datei in unbekannter Formatierung einlesen und Zeilenweise in Listbox ausgeben

    Moin,

    ich habe eine Datei unbestimmter Formatierung (öffne ich Sie in NP++ und Konvertiere Sie zu UTF-8 wird die halbwegs Lesbar). Diese möchte ich in eine Listbox auslesen, bzw. mich interessiert nur der Eintrag 202106170937050Schuster Regina
    Dieser ist immer nach diesem Format aufgebaut, also die Zahlen (Datum+Uhrzeit) und Name.

    Wenn ich diese Datei nun auslese (egal ob StreamReader oder File.ReadAllText) liest er mir nur die erste Zeile aus:
    EEG-1100C V01.00XX0010JJ.CN2

    BeispielCode, habe mich da mal an der Convertierung versucht:

    VB.NET-Quellcode

    1. Private Sub readText()
    2. Try
    3. Dim opendiag As New OpenFileDialog
    4. opendiag.ShowDialog()
    5. Dim lines() As String = File.ReadAllLines(opendiag.FileName)
    6. For Each line In lines
    7. Dim s As String = line
    8. Dim b() As Byte = System.Text.Encoding.UTF8.GetBytes(s)
    9. Dim s1 As String = System.Text.Encoding.Default.GetString(b)
    10. ListBox1.Items.Add(s1)
    11. Next
    12. Catch ex As Exception
    13. MsgBox(ex.Message)
    14. End Try
    15. End Sub


    hat jemand eine Idee wie ich da ran komme? Habe die Datei mal angehängt.
    Dateien
    • XX0010JJ.txt

      (1,07 kB, 31 mal heruntergeladen, zuletzt: )
    Hey,

    VB.NET-Quellcode

    1. Private Sub readText()
    2. Dim words As String() = RichTextBox1.Text.Split(New Char() {" "c})
    3. Dim Index As Integer = -1
    4. For Each word As String In words
    5. Index = Index + 1
    6. If (word.StartsWith("2021")) Then
    7. MsgBox("Vorname/Datum: " & words(Index))
    8. MsgBox("Nachname: " & words(Index + 1))
    9. End If
    10. Next
    11. End Sub


    Habe statt der Textdatei eine Richtextbox genommen, musst du dann bloß wieder ändern.
    Habe jetzt nach (String.StartsWith 2021) gesucht, kannst natürlich auch mehr hinzufügen oder das ändern.



    Das Datum kannst du dann ja aus dem ersten String rausparsen.

    Gruß,
    xored


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza
    Hey, danke!

    Aber das Problem ist ja, dass er die Datei nichtmal komplett einliest. In einer Textbox gehts:

    VB.NET-Quellcode

    1. Dim lines As String = File.ReadAllText(opendiag.FileName)
    2. Dim endString As String
    3. For Each line In lines
    4. TextBox1.Text = TextBox1.Text & line
    5. Next
    6. Dim a As String = TextBox1.Text
    7. 'endtring = a.Substring()
    8. Dim pos = a.IndexOf(".CN") + 10
    9. MsgBox(a.Substring(pos))


    Aber irgendwie muss es doch ohne Textbox als Aufbau gehen
    Ist das Original denn auch eine Textdatei gewesen? Habe jetzt alle möglichen Encodings probiert, aber das gleiche Problem gehabt.
    Vielleicht ist das eine Binary und die kann man nicht wie normale Textdateien lesen?


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza
    Das Problem ist, dass die Datei keine Leerzeichen, sondern jede Menge Null-Zeichen(Chr(0)) enthält.
    Hier mal als Beispiel ein VBA Code:
    Datei binär einlesen, Chr(0) durch Chr(32) ersetzen, mehrfache Leerzeichen durch 1 blank ersetzen.

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim T$, i&
    3. Open ("d:\#1\XX0010JJ-1.txt") For Binary As #1
    4. T = Space$(LOF(1))
    5. Get #1, , T
    6. Close
    7. T = Replace(T, Chr$(0), " ") ' CHR(0) in Leerzeichen
    8. While InStr(T, " ")
    9. T = Replace(T, " ", " ")
    10. Wend
    11. MsgBox T
    12. Dim pos&
    13. pos = InStr(T, ".CN") + 15
    14. Dim txt$
    15. txt = Mid$(T, pos)
    16. MsgBox txt
    17. end sub
    @Eierlein hat Recht, so klappts:

    VB.NET-Quellcode

    1. Dim Text As String = IO.File.ReadAllText("C:\Users\xored\Desktop\XX0010JJ.txt", System.Text.Encoding.UTF8)
    2. Text = Text.Replace(Convert.ToChar(0), " ")
    3. Dim words As String() = Text.Split(New Char() {" "c})
    4. Dim Index As Integer = -1
    5. For Each word As String In words
    6. Index = Index + 1
    7. If (word.StartsWith("2021")) Then
    8. ListBox1.Items.Add("Vorname/Datum: " & words(Index))
    9. ListBox1.Items.Add("Nachname: " & words(Index + 1))
    10. End If
    11. Next


    Damit kann man die ganze Datei lesen.


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza