mehrere Strings splitten

  • C#

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

    mehrere Strings splitten

    Moin, evtl hat hier ja jemand eine elegante Lösung um mehrere Strings zu splitten:

    Dieser Text befindet sich in einem Textdokument:

    HTML-Quellcode

    1. 0:produkt 1
    2. 0:produkt 2
    3. 0:Produkt 3
    4. 0:Produkt 4
    5. 0:Produkt 5
    6. 0:Produkt 6
    7. 0:Produkt 7
    8. 0:Produkt 8


    Datei auslesen und in Array "Productlist" packen:

    C#-Quellcode

    1. private List<string> Productlist;
    2. private void ProdListeRead()
    3. {
    4. this.Productlist = new List<string>();
    5. string[] readText = File.ReadAllLines(@"Dateipfad/Datei");
    6. foreach (string s in readText)
    7. {
    8. this.Productlist.Add(s); //Hinzufügen Productlist-Array
    9. }


    nun liegen all diese Zeilen in der Liste.

    Jetzt soll jede Zeile gesplittet werden ausser Zeile"0":

    C#-Quellcode

    1. string[] ProdSplit1 = Productlist[1].Split(':'); //Split Produkt1
    2. string[] ProdSplit2 = Productlist[2].Split(':'); //Split Produkt2
    3. string[] ProdSplit3 = Productlist[3].Split(':'); //Split Produkt3
    4. string[] ProdSplit4 = Productlist[4].Split(':'); //Split Produkt4
    5. string[] ProdSplit5 = Productlist[5].Split(':'); //Split Produkt5
    6. string[] ProdSplit6 = Productlist[6].Split(':'); //Split Produkt6
    7. string[] ProdSplit7 = Productlist[7].Split(':'); //Split Produkt7
    8. string[] ProdSplit8 = Productlist[8].Split(':'); //Split Produkt8


    Sieht ziemlich "scheisse" aus.

    Kenne mich leider nicht gut mit schleifen aus
    geht das irgendwie eleganter in einer Schleife?
    z.B. So irgendwie:

    C#-Quellcode

    1. foreach (string[] ProdSplit in Productlist[1-8]) //Zeile 2-9
    2. {
    3. TxtNr1.Text = ProdSplit[1].[0];
    4. ...
    5. }


    ------------------------------------
    Die Produkte werden so in Textboxen übernommen wies drinsteht:

    C#-Quellcode

    1. TxtP1.Text = ProdSplit1[1];
    2. TxtP2.Text = ProdSplit2[1];


    Wenn Zahl == 0 dann nichts tun:

    C#-Quellcode

    1. if (ProdSplit1[0] != "0") //ProdNr1
    2. {
    3. TxtNr1.Text = ProdSplit1[0];
    4. }


    Wird eine supergrosse Liste und lauter Arrays?! ... Müsste doch machbar sein, das in eine Liste zu packen ?(

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

    @newsletter Welcher Teil der Zeilen soll final wo hin kommen?
    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!
    Ja machbar ist es schon. Nur das Ziel, wie schon ROG gefragt hat, muss auch bekannt sein.

    Vielleich kurz zum vorgehen.
    Wenn die die erste Zeile nicht brauchst, dann kann die auch gelöscht werden.
    Wenn sie gebraucht wird, dann fang eine schleife einfach bei der 2. Position an. also
    For i as int32=1 to Productlist.length -1 vorsicht ist VB.Net

    Nun iterierst du durch die List und splitest es bei jedem durchgang.

    Freundliche Grüsse

    exc-jdbi
    Variante 1
    Textdokument direkt in Textboxen

    C#-Quellcode

    1. public partial class Form1 : Form
    2. {
    3. public Form1()
    4. {
    5. InitializeComponent();
    6. }
    7. private void Button1_Click(object sender, EventArgs e)
    8. {
    9. string filename = "TextFile1.txt";
    10. string[] readText = System.IO.File.ReadAllLines(filename);
    11. string[] ProdSplit;
    12. for (int i = 1; i <= readText.Count() - 1; i++)
    13. {
    14. ProdSplit = readText[i].Split(':');
    15. if (ProdSplit[0] != "0")
    16. {
    17. this.Controls["TxtNr" + i.ToString()].Text = ProdSplit[0];
    18. }
    19. this.Controls["TxtP" + i.ToString()].Text = ProdSplit[1];
    20. }
    21. }
    22. }

    Variante 2
    Mit Productlist-Array und Produkte-Klasse

    C#-Quellcode

    1. public partial class Form1 : Form
    2. {
    3. public Form1()
    4. {
    5. InitializeComponent();
    6. }
    7. private void Button1_Click(object sender, EventArgs e)
    8. {
    9. string filename = "TextFile1.txt";
    10. string[] readText = System.IO.File.ReadAllLines(filename);
    11. List<Produkt> Productlist = new List<Produkt>();
    12. string[] ProdSplit;
    13. for (int i = 1; i <= readText.Count() - 1; i++)
    14. {
    15. ProdSplit = readText[i].Split(':');
    16. Productlist.Add(new Produkt
    17. {
    18. Number = ProdSplit[0],
    19. Name = ProdSplit[1]
    20. });
    21. }
    22. for (int i = 1; i <= Productlist.Count; i++)
    23. {
    24. if (Productlist[i - 1].Number != "0")
    25. {
    26. this.Controls["TxtNr" + i.ToString()].Text = Productlist[i - 1].Number;
    27. }
    28. this.Controls["TxtP" + i.ToString()].Text = Productlist[i - 1].Name;
    29. }
    30. }
    31. }
    32. class Produkt
    33. {
    34. public string Name;
    35. public string Number;
    36. }
    @HenryV Arbeitest Du immer ohne präzise Aufgabenstellung aus der Glaskugel?
    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!
    Müsste doch machbar sein, das in eine Liste zu packen

    Alternativ zum Splitten des Strings könnte man auch über die Methode Substring an die Daten kommen.

    C#-Quellcode

    1. List<string> lstProducts = new List<string>();
    2. foreach(string line in File.ReadAllLines("Pfad zur Datei"))
    3. if(line.Contains(":"))
    4. lstProducts.Add(line.Substring(line.IndexOf(':') + 1));

    @RodFromGermany
    Für mich war die Aufgabenstellung einigermassen verständlich.
    1. Textdatei einlesen
    2. Zeilen splitten und in Liste speichern
    3. Liste in Textboxen ausgeben
    Und dies in wenigen Schritten realisieren.

    Das ganze sah ich für mich als Übung an, da ich in C# noch nicht so versiert bin.
    Das Ergebnis habe ich dann einfach gepostet .

    Gruss HenryV