Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 🙂

 

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?

 

 

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

  • Autor
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 

 

  • Autor
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. ;) 

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

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.

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.