Werte Splitten

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Werte Splitten

    Moin,

    Hat vielleicht jemand eine Idee wie ich mehrere Linien eines Textdokuments auslese und anschliessend splitte?
    Kenne mich nicht sonderlich gut mit Schleifen aus...

    Das auslesen klappt, nur leider das Splitten nicht ?( bin nun schon ne Ewigkeit an dem...

    So sieht das Textdokument aus:

    00:Hallo
    01:Wie
    02:Geht
    03:Es
    04:Dir
    ...(anzahl unbekannt deshalb bis -1)

    C#-Quellcode

    1. FileStream fs;
    2. fs = new FileStream(paths + file, FileMode.OpenOrCreate, FileAccess.ReadWrite);
    3. StreamReader fReader = new StreamReader(fs);
    4. fReader.BaseStream.Seek(0, SeekOrigin.Begin);
    5. string Linie = fReader.ReadLine();
    6. while (fReader.Peek() > -1)
    7. {
    8. Linie.Split(':');
    9. MessageBox.Show(Linie[0]); //Soll alle Zeichenfolgen vor dem ":" einzeln ausgeben... (=00 - 01 - 02 - 03 - 04)
    10. MessageBox.Show(Linie[1]; //Soll alle Zeichenfolgen nach dem ":" ausgeben... (=Hallo - Wie - Geht - Es - Dir
    11. String strTeilen;
    12. }
    13. fReader.Close();


    Hoffe hier weiss jemand weiter :huh:
    1. Dein Split ist zwar korrekt, doch der Rückgabewert wird nirgends gespeichert.
    2. Strings sind immutable(unveränderlich). Das ist der Grund warum alle String Funktionen wie Trim, Substring, Remove usw. neue Strings zurückgeben, anstatt den verwendeten zu verändern.
    3. Strings sind gleichzeitig auch ein Array vom Typ char. Daher hat man Funktionen wie All, Where, Except, usw. (sofern der using auf System.Linq vorhanden ist).

    Kurz gesagt, du greifst auf den unveränderten string zu und rufst den ersten bzw. zweiten char dieses strings ab, anstatt der gesplitteten Werte.
    Du musst zunächst die Rückgabe des Splits in einem string[] speichern, und dann den ersten bzw. zweiten Wert abrufen.

    Edit:
    So ganz nebenbei solltest du die Zeilen innerhalb der While-Schleife einlesen, sonst läufst du entweder in eine Endlosschleife, oder aber du splittest für jedes Zeichen der Datei auf derselben Zeile herum.

    Edit2:
    Dateipfade sollten mit Path.Combine() zusammengesetzt werden.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „EaranMaleasi“ ()

    newsletter schrieb:

    So sieht das Textdokument aus:
    Und so wird es zeilenweise abgearbeitet:

    C#-Quellcode

    1. foreach(string line In System.IO.File.ReadLines("PFAD_ZU_DEINER_DATEI"))
    2. {
    3. string [] parts = line.split(...);
    4. // was mit parts tun
    5. }
    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!
    Ich schreibs mal mit VB.Net, damit du auch noch ein bisschen denken musst.

    Mach dir zwei List(of String) eine für deine ZeilenNummern und eine für den Text.

    VB.NET-Quellcode

    1. Dim Text As New List(Of String)
    2. Dim ZeilenNummer As New List(Of String)


    Setze mit Combine genau einen Pfad mit DateiNamen zusammen der zu deiner Datei führt.

    VB.NET-Quellcode

    1. dim filename as String=Combine(...)


    Wenn schon Filrestream und Streamreader genutzt werden dann mach es bitte mit Using-Blöcke

    VB.NET-Quellcode

    1. Using fs As New FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite)
    2. Using sr As New StreamReader(fs)


    Im Using-Block dann eine Whileschleife in etwa so

    VB.NET-Quellcode

    1. While (Not sr.EndOfStream)


    das kommt in die Whileschleife rein

    VB.NET-Quellcode

    1. Dim Linie As String = sr.ReadLine()
    2. ZeilenNummer.Add(Linie.Substring(0, Linie.IndexOf(":"c)))
    3. Text.Add(Linie.Substring(Linie.IndexOf(":"c) + 1, Linie.Length - Linie.IndexOf(":"c) - 1))
    4. 'ODER SO
    5. Dim Linie As String = sr.ReadLine()
    6. Dim split = Linie.Split({":"}, StringSplitOptions.RemoveEmptyEntries)
    7. ZeilenNummer.Add(split(0))
    8. Text.Add(split(1))


    Sofern die wirklich zusammengekettet werden sollen.
    Schreibe eine separate Funktion in der du die Array Zusammenkettest mit folgendenm inhalt

    VB.NET-Quellcode

    1. Return String.Join(" - ", sArr)


    Und schon funkst es.


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()