MauriceL01 Geschrieben 21. April 2020 Geschrieben 21. April 2020 Hallo zusammen, ich beschäftige mich momentan zusätzlich zu Java und RPG mit C#. Bei meinem kleinem Übungsprojekt bin ich jetzt aber auf ein Problem gestoßen, was ich einfach nicht gelöst bekomme. Ich habe bereits Stunden selber geknobelt und gegooglet, nichts passendes gefunden, bzw. funktiert das alles bei mir nicht. Ich hoffe mir kann hier jemand weiterhelfen, da die Lösung wahrscheinlich sehr einfach ist und ich grade nur auf dem Schlauch stehe. So jetzt mal zum Problem: Ich habe eine CSV-Datei, in welche Kundendaten gespeichert sind. Je Kunde, eine eigene CSV. Diese ist folgendermaßen aufgebaut: Zitat Kundennummer;Vorname;Nachname;Strasse;Hausnummer;PLZ;Ort;......... Jetzt möchte ich diese CSV-Datei einlesen , das bekomme ich auch super hin, allerdings steht dann die komplette Zeile in meinem String. Ich möchte aber jedes Attribut (Kundennummer, Vorname, Nachname,...) in einer eigenen Variable stehen haben. Ich habe im Internet was gefunden, womit ich das ganze splitten kann, die .Split(';') - Funktion. Allerdings funktioniert es bei mir einfach nicht. Ich habe es bereits mit Strings, mit Arrays, mit Listen probiert, aber immer tritt irgendein anderes Problem auf. Kann mir evtl. jemand sagen, wie ich das schön lösen kann? Es soll nicht soo extrem kompliziert sein, soll aber dennoch gut funktionieren. Ich freue mich auf eure Hilfe Gruß Maurice 🙂 Zitieren
KeeperOfCoffee Geschrieben 21. April 2020 Geschrieben 21. April 2020 (bearbeitet) Warum das Rad neu erfinden, wenn wir dafür bereits Helferlein haben https://www.nuget.org/packages/CsvHelper/ Auch: Falsches Forum...gehört ins .NET Forum Edit: Und wenn du neugierig bist, kannst du dir ja das GitRepo vom CSVHelper ansehen Bearbeitet 21. April 2020 von KeeperOfCoffee Zitieren
Whiz-zarD Geschrieben 21. April 2020 Geschrieben 21. April 2020 Natürlich könnte man jetzt CsvHelper nehmen. Die Bibliothek ist sehr solide aber welchen Lerneffekt hat es? Ich nehme an, dass der TE entweder noch am Anfang seiner Ausbildung steht oder dies nur hobbymäßig macht, sonst wäre er wohl schon auf den CsvHelper gestoßen, da er in der .Net-Welt schon sehr bekannt ist. Zumindest wäre er auf Tutorials gestoßen, die man massig im Internet zu diesem Thema findet und auf die Schnelle könnte man auch was mit LINQ zusammenbauen. Allerdings wäre der Lerneffekt nicht besonders hoch, wenn ich die Antwort hier reinschreibe. Daher meine Frage: Was hast du denn alles probiert? Bzw. wie sieht denn dein Lösungsansatz aus? Zitieren
MauriceL01 Geschrieben 22. April 2020 Autor Geschrieben 22. April 2020 vor 16 Stunden schrieb KeeperOfCoffee: Warum das Rad neu erfinden, wenn wir dafür bereits Helferlein haben https://www.nuget.org/packages/CsvHelper/ Auch: Falsches Forum...gehört ins .NET Forum Edit: Und wenn du neugierig bist, kannst du dir ja das GitRepo vom CSVHelper ansehen Hallo KeeperOfCoffee, erst einmal vielen Dank für die schnelle Antwort. Eine Frage habe ich, warum ist das das falsche Forum? Wir sind doch hier im C#-Forum oder nicht und es geht hier doch um C#? Gruß Maurice Zitieren
Whiz-zarD Geschrieben 22. April 2020 Geschrieben 22. April 2020 vor 1 Minute schrieb MauriceL01: Wir sind doch hier im C#-Forum oder nicht und es geht hier doch um C#? C# ist aber nicht C oder C++. C# ist in der .NET-Welt beheimatet, daher gehört es in das .NET-Forum. Zitieren
MauriceL01 Geschrieben 22. April 2020 Autor Geschrieben 22. April 2020 vor 10 Stunden schrieb Whiz-zarD: Natürlich könnte man jetzt CsvHelper nehmen. Die Bibliothek ist sehr solide aber welchen Lerneffekt hat es? Ich nehme an, dass der TE entweder noch am Anfang seiner Ausbildung steht oder dies nur hobbymäßig macht, sonst wäre er wohl schon auf den CsvHelper gestoßen, da er in der .Net-Welt schon sehr bekannt ist. Zumindest wäre er auf Tutorials gestoßen, die man massig im Internet zu diesem Thema findet und auf die Schnelle könnte man auch was mit LINQ zusammenbauen. Allerdings wäre der Lerneffekt nicht besonders hoch, wenn ich die Antwort hier reinschreibe. Daher meine Frage: Was hast du denn alles probiert? Bzw. wie sieht denn dein Lösungsansatz aus? Hallo Whiz-zarD, danke auch dir für die schnelle Antwort, ja ich gebe dir Recht, den CSV-Helper habe ich bereits gesehen und mir angeschaut und auch etliche Erläuterungen und Tutorials im Netz gefunden, aber ich möchte, wie du auch bereits geschrieben hast, etwas lernen und dann auch wissen was ich warum mache. Denn einfach irgendwelche Bibliotheken einbinden und mittels einem YouTube-Tutorials oderso nachprogrammieren, bringt meiner Meinung nach nicht wirklich viel. Also mein letzter Ansatz war das lesen der Datei mittels des StreamReader in einer Schleife, da bin ich aber irgendwie nicht richtig zurecht bekommen, habe es in einer while, sowie in einer foreach Schleife probiert. Ich könnte zwar jetzt code posten, aber da sich dieser momentan alle 2 Minuten komplett verändert, da ich am probieren, probiern und probieren bin, macht das nicht so viel SInn, davon abgesehen ist dies momentan auch noch ziemlicher "Spagetti-Code". Um auch die letzte Frage zu beantworten, ich bin bereits im 2. Jahr meiner Ausbildung zum Fachinformatiker AE. Wir haben uns bis dato im Betrieb allerdings nur mit Java und dem alten RPG beschäftigt, da unsere Programme in diesen Sprachen programmiert werden. Da ich mich aber auch privat weiterbilden möchte, gucke ich mir in meiner Freizeit diverse andere Dinge an, darunter auch eben C#. Gruß Maurice Zitieren
MauriceL01 Geschrieben 22. April 2020 Autor Geschrieben 22. April 2020 vor 3 Minuten schrieb Whiz-zarD: C# ist aber nicht C oder C++. C# ist in der .NET-Welt beheimatet, daher gehört es in das .NET-Forum. Alles klar, danke dir, da weiß ich fürs nächste mal Bescheid. Zitieren
Thanks-and-Goodbye Geschrieben 22. April 2020 Geschrieben 22. April 2020 vor 16 Stunden schrieb KeeperOfCoffee: Auch: Falsches Forum...gehört ins .NET Forum Und wenn der Mod es sieht kann er es ja auch verschieben... alternativ kurz bescheid geben, dann überseht es keiner. Zitieren
MauriceL01 Geschrieben 22. April 2020 Autor Geschrieben 22. April 2020 vor 1 Minute schrieb Chief Wiggum: Und wenn der Mod es sieht kann er es ja auch verschieben... alternativ kurz bescheid geben, dann überseht es keiner. Danke, mache ich! Zitieren
KeeperOfCoffee Geschrieben 22. April 2020 Geschrieben 22. April 2020 Es wäre wohl am besten, wenn du mal den Code postest, an dem es gerade scheitert. Ja du sagst, dass sich dieser ständig verändert, aber wir können hier ja nicht Rätselraten woran es jetzt scheitert. Zitieren
Whiz-zarD Geschrieben 22. April 2020 Geschrieben 22. April 2020 vor 1 Stunde schrieb MauriceL01: Also mein letzter Ansatz war das lesen der Datei mittels des StreamReader in einer Schleife, da bin ich aber irgendwie nicht richtig zurecht bekommen, habe es in einer while, sowie in einer foreach Schleife probiert. Ich könnte zwar jetzt code posten, aber da sich dieser momentan alle 2 Minuten komplett verändert, da ich am probieren, probiern und probieren bin, macht das nicht so viel SInn, davon abgesehen ist dies momentan auch noch ziemlicher "Spagetti-Code". Mach dich mal ein bisschen mit LINQ vertraut. Das ist ein Verfahren, um Datenquellen verschiedensten Ursprungs anzusprechen. Die Datenquellen müssen lediglich das IEnumerable<T> bzw. das IQueryable<T>-Interface implementieren. LINQ besitzt zwei Arten der Syntax: Eine SQL-ähnliche Syntax und Aufrufe über Methoden. Vielleicht bist du ja über die Methode File.ReadLines() gestolpert, die ein IEnumerable<string> zurückgibt. Um die Zeilen in ihre Einzelteile zu zerlegen kann man ja, wie du schon richtig schreibst, die Split()-Methode verwenden. Ein Beispiel mit LINQ sieht dann so aus: // mit Methoden-Aufrufen var rows = File.ReadLines("customer.csv") .Select(line => line.Split(';')); // mit SQL-ähnlicher Syntax var rows = from line in File.ReadLines("customer.csv") select line.Split(';'); Natürlich ist da weitaus mehr möglich, wie z.B. filtern, gruppieren oder aggregieren aber vielleicht reicht es für dich, ein Anfang zu finden. Da ist C# weit aus fortschrittlicher als Java. Schleifen werden immer seltener benutzt. In den meisten Fällen baut man ja nur ein Mapping auf, um von einer Darstellung zu einer anderen zu kommen. In diesem Fall z.B. von einer CSV-Datei mit Kundendaten zu einer Liste mit Kundenobjekten. Es muss ja nicht immer eine CSV-Datei sein. Es kann auch eine JSON- oder XML-Datei oder sogar eine Datenbank sein und um Datenabfragen zu vereinheitlichen wurde LINQ entwickelt. Zitieren
MauriceL01 Geschrieben 28. April 2020 Autor Geschrieben 28. April 2020 Am 22.4.2020 um 11:04 schrieb Whiz-zarD: Mach dich mal ein bisschen mit LINQ vertraut. Das ist ein Verfahren, um Datenquellen verschiedensten Ursprungs anzusprechen. Die Datenquellen müssen lediglich das IEnumerable<T> bzw. das IQueryable<T>-Interface implementieren. LINQ besitzt zwei Arten der Syntax: Eine SQL-ähnliche Syntax und Aufrufe über Methoden. Vielleicht bist du ja über die Methode File.ReadLines() gestolpert, die ein IEnumerable<string> zurückgibt. Um die Zeilen in ihre Einzelteile zu zerlegen kann man ja, wie du schon richtig schreibst, die Split()-Methode verwenden. Ein Beispiel mit LINQ sieht dann so aus: // mit Methoden-Aufrufen var rows = File.ReadLines("customer.csv") .Select(line => line.Split(';')); // mit SQL-ähnlicher Syntax var rows = from line in File.ReadLines("customer.csv") select line.Split(';'); Natürlich ist da weitaus mehr möglich, wie z.B. filtern, gruppieren oder aggregieren aber vielleicht reicht es für dich, ein Anfang zu finden. Da ist C# weit aus fortschrittlicher als Java. Schleifen werden immer seltener benutzt. In den meisten Fällen baut man ja nur ein Mapping auf, um von einer Darstellung zu einer anderen zu kommen. In diesem Fall z.B. von einer CSV-Datei mit Kundendaten zu einer Liste mit Kundenobjekten. Es muss ja nicht immer eine CSV-Datei sein. Es kann auch eine JSON- oder XML-Datei oder sogar eine Datenbank sein und um Datenabfragen zu vereinheitlichen wurde LINQ entwickelt. Ich bedanke mich für diese Information. Ich habe es nun folgendermaßen gelöst: try { StreamReader sr = new StreamReader("kunden/" + textBoxZusuchendeKundennummer.Text + ".csv"); while (!sr.EndOfStream) { try { string myVar = sr.ReadLine(); string[] words = myVar.Split(';'); foreach (var word in words) { System.Console.WriteLine($"<{word}>"); } labelKundennummer.Text = words[0]; textBoxVorname.Text = words[1]; textBoxNachname.Text = words[2]; .... } catch { Console.WriteLine("ERROR: Datenübertragung von Datei in Software fehlgeschlagen."); } } } catch { labelErr.ForeColor = Color.Red; labelErr.Text = "Kein Kunde mit der Kundennummer '" + textBoxZusuchendeKundennummer.Text + "' vorhanden."; Console.WriteLine("ERROR: Kunde noch nicht vorhanden."); } Zitieren
MauriceL01 Geschrieben 28. April 2020 Autor Geschrieben 28. April 2020 Am 22.4.2020 um 11:04 schrieb Whiz-zarD: Mach dich mal ein bisschen mit LINQ vertraut. Das ist ein Verfahren, um Datenquellen verschiedensten Ursprungs anzusprechen. Die Datenquellen müssen lediglich das IEnumerable<T> bzw. das IQueryable<T>-Interface implementieren. LINQ besitzt zwei Arten der Syntax: Eine SQL-ähnliche Syntax und Aufrufe über Methoden. Vielleicht bist du ja über die Methode File.ReadLines() gestolpert, die ein IEnumerable<string> zurückgibt. Um die Zeilen in ihre Einzelteile zu zerlegen kann man ja, wie du schon richtig schreibst, die Split()-Methode verwenden. Ein Beispiel mit LINQ sieht dann so aus: // mit Methoden-Aufrufen var rows = File.ReadLines("customer.csv") .Select(line => line.Split(';')); // mit SQL-ähnlicher Syntax var rows = from line in File.ReadLines("customer.csv") select line.Split(';'); Natürlich ist da weitaus mehr möglich, wie z.B. filtern, gruppieren oder aggregieren aber vielleicht reicht es für dich, ein Anfang zu finden. Da ist C# weit aus fortschrittlicher als Java. Schleifen werden immer seltener benutzt. In den meisten Fällen baut man ja nur ein Mapping auf, um von einer Darstellung zu einer anderen zu kommen. In diesem Fall z.B. von einer CSV-Datei mit Kundendaten zu einer Liste mit Kundenobjekten. Es muss ja nicht immer eine CSV-Datei sein. Es kann auch eine JSON- oder XML-Datei oder sogar eine Datenbank sein und um Datenabfragen zu vereinheitlichen wurde LINQ entwickelt. Trotzdem werde ich mir LINQ mal ansehen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.