Zum Inhalt springen

CSV Datei einlesen und splitten


MauriceL01

Empfohlene Beiträge

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 🙂

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.");
            }

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...