myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » eine List<string []> durchsuchen und materialisieren
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

eine List<string []> durchsuchen und materialisieren

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Dacs Dacs ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.06.2019
Beiträge: 2


Dacs ist offline

eine List<string []> durchsuchen und materialisieren

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

vielleicht habe ich einen Knoten im Kopf und ihr könnt mir vielleicht helfen. (Mein Erfahrungslevel mit Listen und Linq ist leider noch gering, sonst würde ich wohl nicht fragen enttäuscht ) .

Aufgabe, es müssen Daten einer CSV geprüft werden, Daten.dat. Die zu prüfenden Dinge stehen in einer weitere CSV-Datei, Parameter.dat.

Die Sätze der DatenDatei habe ich in eine Liste als bereits via Split in string[] umgewandelt, also List<string[]>.
Eine ebensolche List<string[]> gibt es auf von der Parameter.dat.

Mein Problem:
ich durchsuche die Parameter.dat mit Linq, dies findet zwar den Eintrag, aber ich bekomme ich ihn nicht materialisiert.

C#-Code:
var param_i = from S in paraListe
                where S[feldNr].Equals(feldNr.ToString())
                              select S;

ich ging davon aus, das das Ergebinis ist param_i steht. Zumindest wird mir auch beim ersten Durchlauf das richtige Ergebnismitgeteilt, bei jedem Zugriff auf param_i wird allerdings wieder auf die Liste Zugegriffen, was so nicht gewollt ist. ich brauche ja nur einmal ein Ergebnis, nicht bei jedem Anfassen der Variabel.


Dann versuchte ich es mit der Find-Methode, x scheint mir das Element in der List zu sein, da es vom Typ string[] ist, habe ich es so ansprechen wollen ...

C#-Code:
var param_i = paraListe.Find(x =>  x[0].Equals(feldNr))
                   { return x; } ;

... scheiterte dann bei der Bedingung, wie man das definiert.


Vermutlich ist es eine sehr logische Antwort, aber ich habe mich leider vollkommen ferheddert verwundert

Danke für`s Lesen und "Schubsen"

Hägar
Neuer Beitrag 19.06.2019 11:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 978
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich behaupte jetzt einfach mal, dass hier zu wenig Code ist um dir zu helfen. (Uns fehlt zudem jegliche Debug-Info) Je nachdem was in den Variablen drinsteht könnte der Code wahrscheinlich sogar funktionieren - die Frage ist eher: Was entspricht nicht deinen Erwartungen?

Zur Verdeutlichung
Sofern du bereits ein Objekt mit dem Inhalt deiner CSV-Datei hast (scheint hier eine Art Liste/Array zu sein) hast du die Daten bereits ausgelesen. Wir reden somit gar nicht mehr von einem CSV-Problem?

Grundlegend - ich vermute, dass in deinem ersten Codeschnipsel:
a) paraListe eine List<string[]> ist (die aus Parameter.dat)
b) param_i wäre demzufolge ein string[] (also letztlich eine Zeile aus Parameter.dat)
-> Solltest du lediglich den Wert daraus haben wollen, wäre ein "select S[feldNr]" wohl das Richtige für dich

Abseits davon:
Ich finde es nicht besonders schlau eine CSV-Datei lediglich in eine List<string[]> einzulesen. Jeder der den Code verstehen möchte - muss bei dieser Implementierung auch den Aufbau der CSV-Dateien auswendig können.

Du kennst den Aufbau der CSV-Dateien und kannst problemlos eine Klasse mit sinnvollen Variablen erstellen, zu der jeweils eine Instanz pro Zeile erstellt werden kann, womit du dir das Leben bedeutend übersichtlicher gestalten könntest. Du solltest dir deshalb mal folgendes durchlesen und deinen Code entsprechend umbauen:
 https://bartsimons.me/reading-csv-files-...with-csvparser/

Danach wird sich dein Problem wahrscheinlich von allein erledigen ;-)

LG
Neuer Beitrag 19.06.2019 11:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
unconnected unconnected ist männlich
myCSharp.de-Mitglied

avatar-3200.jpg


Dabei seit: 13.08.2006
Beiträge: 849
Entwicklungsumgebung: VS2017 Enterprise,VS Code
Herkunft: Oerlinghausen/NRW


unconnected ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

Du bekommst aus deinem Linq statement ein IEnumerable<string>

Dieser wird tatsächlich bei jeder neuen Iteration die zugrunde liegende Liste neu durchsuchen.

Um das zu unterbinden müsstest Du das Ergebnis mit .ToList() oder .FirstOrDefault() persistieren. Je nachdem wieviele Ergebnisse Du erwartest.
Neuer Beitrag 19.06.2019 12:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.160
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Neuer Beitrag 19.06.2019 12:51 Beiträge des Benutzers | zu Buddylist hinzufügen
Dacs Dacs ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.06.2019
Beiträge: 2

Themenstarter Thema begonnen von Dacs

Dacs ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank für die Antworten !

Die muss ich erstmal wiederkauen, vor allem die verschiednen Hinweise zu CSV- Verarbeitung, die mir in diesem Programm leider nicht helfen werden, denn die Zeilen haben nicht den selben Aufbau.

.FirstOrDefault() ... scheint es zu sein!

Merci
Neuer Beitrag 19.06.2019 13:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Monate.
Der letzte Beitrag ist älter als 4 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 11.11.2019 21:22