Hallo Leute, ich möchte eine CSV-Datei mit C# auswerten, die aus mehreren Zeilen und Spalten besteht. Die Grundsätzliche Form sieht wie folgt aus: xxx,xxx,xxx,xxx,xxx,xxx<CR> xxx,xxx,xxx,xxx,xxx,xxx<CR> xxx,xxx,xxx,xxx,xxx,xxx<CR> xxx,xxx,xxx,xxx,xxx,xxx<CR> xxx,xxx,xxx,xxx,xxx,xxx<CR> ... Wie ich die Datei einlesen und in die einzelnen Werte aufteile ist mir grundsätzlich klar. Allerdings habe ich ein paar Designfragen. 1. Wie speichert man die Daten am besten, mit einer Liste, Dictionary, Dataset? 2. Ich möchte später nach einem bestimmten Wert in der ersten Spalte suchen und die Datensätze (Datensatz definiere ich als eine zusammenhängende Zeile) ich eine weiters Objekt speichern. Also z.B. möchte ich alle Datensätze die in der ersten Spalte eine drei stehen haben in eine neue Liste, Dictionary bzw. Dataset schreiben.
Patrick L. schrieb: > 1. Wie speichert man die Daten am besten, mit einer Liste, Dictionary, > Dataset? ich würde eine stuct anlegen und diese in liste speichern.
Patrick L. schrieb: > Wie ich die Datei einlesen und in die einzelnen Werte aufteile ist mir > grundsätzlich klar. Allerdings habe ich ein paar Designfragen. Trotzdem der Verweis auf http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader > > 1. Wie speichert man die Daten am besten, mit einer Liste, Dictionary, > Dataset? Das kommt darauf an, was du damit machen willst und um wieviele Datensätze es sich handelt. > > 2. Ich möchte später nach einem bestimmten Wert in der ersten Spalte > suchen und die Datensätze (Datensatz definiere ich als eine > zusammenhängende Zeile) ich eine weiters Objekt speichern. > > Also z.B. möchte ich alle Datensätze die in der ersten Spalte eine drei > stehen haben in eine neue Liste, Dictionary bzw. Dataset schreiben. Eine DataTable (ggf. auch aus einem Typed Dataset) ist bequem, weil es eine Select methode anbietet. Bei kleinen Datenmengen, ist das meistens die erste Wahl, weil man damit flexibel ist. Eine einfache Liste nimmt man nur dann, wenn die spätere Suche kaum vorhersagbar ist und wenn man annehmen kann, dass man bei der Suche sowieso alle Objekte durchgehen muss. Das kommt aber kaum vor. Wenn man aber sowieso für andere Zwecke die Objekte durchiterieren muss, kann man hingegen eine Liste durchaus benutzen. Ein Dictionary kann man nehmen, wenn man die Kriterien, nach denen später wird, schon kennt und wenn sie eindeutig sind. Dann könnte man z.B. Dictionary<int, List<myobjectType>> nehmen. Ist aber recht unflexibel. Bei größeren Datenmengen kann man eine SQLite Datenbank einbinden. Bei kleinen Datenmengen und seltenen Suchoperationen ist das alles eher Geschmackssache.
Danke für die Antworten. Also die Datenmenge ist eher gering, vllt. bis 8000 Zeilen. Es geht um Daten die mit dem Openlog von Sparkfun auf SD-Karte protokolliert werden. Einige Spalten möchte ich graphisch darstellen. Wichtig wäre noch, das beim extrahieren einer Teilmenge diese ihre Reiehnfolge beibehält. Also: xxx,xxx,xxx,xxx,xxx,xxx<CR> 300,xxx,001,xxx,xxx,xxx<CR> 300,xxx,002,xxx,xxx,xxx<CR> 300,xxx,003,xxx,xxx,xxx<CR> xxx,xxx,xxx,xxx,xxx,xxx<CR> sollte 300,xxx,001,xxx,xxx,xxx<CR> 300,xxx,002,xxx,xxx,xxx<CR> 300,xxx,003,xxx,xxx,xxx<CR> ergeben. und nicht: 300,xxx,002,xxx,xxx,xxx<CR> 300,xxx,001,xxx,xxx,xxx<CR> 300,xxx,003,xxx,xxx,xxx<CR> Aus den bisherigen Antworten konnte ich noch keine Best-Practice Methode ableiten.
Nur mal in den Raum geworfen - mit dem freien GNUPLOT geht das vermutlich auch ohne Programmieren. gnuplot> plot "SPARKLOG.CSV" Ob das mit dem Filtern klappt muss man sich einlesen
Slartibartfaß schrieb: > Nur mal in den Raum geworfen - mit dem freien GNUPLOT geht das > vermutlich auch ohne Programmieren. Ja schon klar. Mit Excel geht es auch. Ich will aber eine handgemachte Lösung. Außerdem müssen die Messwerte noch umgerechnet werden.
In C# würde ich bei so wenig Daten das Ganze in eine Liste einlesen (pro Zeile ein Objekt) und per LINQ abfragen. "Also z.B. möchte ich alle Datensätze die in der ersten Spalte eine drei stehen haben in eine neue Liste [...]" Wäre dann ein Einzeiler.
Patrick L. schrieb: > Aus den bisherigen Antworten konnte ich noch keine Best-Practice Methode > ableiten. Ich wage einmal zu behaupten, dass es die auch nicht gibt. Das ist schon etwas Geschmackssache. Ich persönlich würde die DataTable benutzen, aber nur aus Gewohnheit.
Klaus. P. schrieb: > Ich wage einmal zu behaupten, dass es die auch nicht gibt. Das ist schon > etwas Geschmackssache. Ich persönlich würde die DataTable benutzen, aber > nur aus Gewohnheit. Vermutlich hast du recht. Allerdings finde ich den Tipp mit der DataTable soweit ich das überblicken kann als am besten für meine Problemstellung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.