Zeilenumbruch erkennen und entfernen

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Zeilenumbruch erkennen und entfernen

    Hallo Zusammen,

    ich bin schon länger auf der suche nach Hilfe zu folgenden Thema und finde einfach keine passenden Beispiele, die mir helfen.

    Ich lese eine Textdatei ein.
    Ganz normal mit

    VB.NET-Quellcode

    1. Dim sreader As StreamReader = New IO.StreamReader("pfad zur Datei", System.Text.Encoding.Default)
    2. Me.Textbox1.Text = sreader.ReadToEnd
    3. sreader.Close()


    Anschließend lasse ich Zeile für Zeile alles auslesen

    VB.NET-Quellcode

    1. dim var_tb1_zeile_splittline() as string = me.Textbox1.text.splitt(Environment.NewLine)
    2. for i as Integer = 0 to var_tb1_zeile_splittline.lenght -1
    3. dim var_tb1_zeile_splitt() as string = var_tb1_zeile_splittline(i).splitt(";")
    4. me.DataGridView1.Rows.Add(var_tb1_zeile_splitt(0))
    5. Next


    Das klappt auch alles ganz gut bis hier hin, aber...

    hin und wieder hat (Aus Gründen die ich nicht verstehe) der Eintrag var_tb1_zeile_splitt(0) einen Zeilenumbruch vor dem Eintrag.

    Beispiel zu Verdeutlichung:
    Einmal sieht es so aus

    VB.NET-Quellcode

    1. Zeile1


    und manchmal auch so

    VB.NET-Quellcode

    1. ...hier ist noch eine Zeile drüber...
    2. Zeile1



    Ich bekomme es weg mit dem Code

    VB.NET-Quellcode

    1. me.DataGridView1.Rows.Add(var_tb1_zeile_splitt(0).SubString(1))


    Aber dafür muss ich ja erst einmal erkennen, ob ein Zeilenumbruch vorhanden ist.

    Weiß jemand wie das geht, oder hat jemand von euch eine komplett andere Idee?

    Sisco schrieb:

    Anschließend lasse ich Zeile für Zeile alles auslesen
    Nutze die Lines-Property der TextBox.

    VB.NET-Quellcode

    1. me.DataGridView1.Rows.AddRange(me.Textbox1.Lines)
    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!
    OK. Mist, ich habe etwas unterschlagen... :cursing: Ich lasse die Daten vorher noch prüfen

    VB.NET-Quellcode

    1. dim var_tb1_zeile_splittline() as string = me.Textbox1.text.splitt(Environment.NewLine)
    2. 'Jede Zeile nach dem Zeichen ; splitten
    3. for i as Integer = 0 to var_tb1_zeile_splittline.lenght -1
    4. dim var_tb1_zeile_splitt() as string = var_tb1_zeile_splittline(i).splitt(";")
    5. 'Prüfen, ob der oben erfasste Eintrag bereits im DGV vorhanden ist
    6. dim var_vorhanden = "nein"
    7. for i_2 as Integer = Me.DataGridView1.Rows.Count -1
    8. If Me.DataGridView1.Item(0, i_2).Value = var_tb1_zeile_splitt(0) Then
    9. var_vorhanden="ja"
    10. End If
    11. Next
    12. 'Wenn der Eintrag noch nicht im DGV vorhanden ist, dann eintragen
    13. If var_voranden="nein" then
    14. me.DataGridView1.Rows.Add(var_tb1_zeile_splitt(0))
    15. end if
    16. Next


    Entschuldigung.

    Sisco schrieb:

    Ich lasse die Daten vorher noch prüfen
    Vielleicht so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.TextBox1.Text = IO.File.ReadAllText("pfad zur Datei", System.Text.Encoding.Default)
    3. For Each line In Me.TextBox1.Lines
    4. Dim var_tb1_zeile_splitt() As String = line.Split(";"c)
    5. 'Prüfen, ob der oben erfasste Eintrag bereits im DGV vorhanden ist
    6. Dim var_vorhanden = False
    7. For i_2 As Integer = 0 To Me.DataGridView1.Rows.Count - 1
    8. If Me.DataGridView1.Item(0, i_2).Value.ToString = var_tb1_zeile_splitt(0) Then
    9. var_vorhanden = True
    10. End If
    11. Next
    12. 'Wenn der Eintrag noch nicht im DGV vorhanden ist, dann eintragen
    13. If Not var_vorhanden Then
    14. Me.DataGridView1.Rows.Add(var_tb1_zeile_splitt(0))
    15. End If
    16. Next
    17. End Sub
    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!

    Sisco schrieb:

    hin und wieder hat (Aus Gründen die ich nicht verstehe) der Eintrag var_tb1_zeile_splitt(0) einen Zeilenumbruch vor dem Eintrag.
    Scheinbar hat die Datei inkohärente Zeilvorschübe.
    Aber lass doch den Quatsch mit inne Textbox einlesen, um da die Zeilen wieder rauszulesen.
    Lies die Zeilen direkt ein, mit System.IO.File.ReadAllLines() oder System.IO.File.ReadLines.
    bei .Readlines() kann man mit .Where(function(s)s<>"") auch die Leerzeilen ausfiltern.
    Ahhh..

    Danke RodFromGermany

    Habe es etwas angepasst und schon klappt es:

    VB.NET-Quellcode

    1. If File.Exists("PFAD ZUR DATEI") Then
    2. Me.Textbox1.Text = IO.File.ReadAllText("PFAD ZUR DATEI", System.Text.Encoding.Default)
    3. For Each line In Me.Textbox1.Lines
    4. Dim var_tb1_zeile_splitt() As String = line.Split(";")
    5. 'Prüfen, ob der oben erfasste Eintrag bereits im DGV vorhanden ist
    6. Dim var_vorhanden = False
    7. For i_2 As Integer = 0 To Me.DataGridView1.Rows.Count - 1
    8. If Me.DataGridView1.Item(0, i_2).Value = var_tb1_zeile_splitt(0) Then
    9. var_vorhanden = True
    10. End If
    11. Next
    12. 'Wenn der Eintrag noch nicht im DGV vorhanden ist, dann eintragen
    13. If Not var_vorhanden Then
    14. Me.DataGridView1.Rows.Add(var_tb1_zeile_splitt(0))
    15. End If
    16. Next
    17. End If


    Zumindest das Problem mit den Zeilenumbrüchen ist weg.

    Danke

    Sisco schrieb:

    Zumindest
    Weitere Probleme?
    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!