Ich habe also gelesen, dass ich meinen eigenen CSV-Reader / Writer nicht schreiben sollte, also habe ich versucht, die über nuget installierte CsvHelper-Bibliothek zu verwenden. Die CSV-Datei ist ein Graustufenbild, wobei die Anzahl der Zeilen die Bildhöhe und die Anzahl der Spalten die Breite ist. Ich möchte die Werte zeilenweise in ein einzelnes List<string>
oder List<byte>
lesen.
Der Code, den ich bisher habe, ist:
%Vor% Aber allValues.ToList<string>()
wirft ein:
CsvConfigurationException wurde vom Benutzercode nicht behandelt
Eine Ausnahme vom Typ 'CsvHelper.Configuration.CsvConfigurationException' ist in CsvHelper.dll aufgetreten, wurde aber nicht im Benutzercode behandelt
Zusätzliche Informationen: Typen, die IEnumerable erben, können nicht automatisch zugeordnet werden. Haben Sie versehentlich GetRecord oder WriteRecord aufgerufen, das auf einen einzelnen Datensatz reagiert, anstatt GetRecords oder WriteRecords aufzurufen, die auf eine Liste von Datensätzen zugreifen?
GetRecords
erwartet wahrscheinlich meine eigene benutzerdefinierte Klasse, aber ich möchte nur die Werte als primitiven Typ oder String. Außerdem vermute ich, dass die gesamte Zeile in eine einzige Zeichenfolge konvertiert wird, anstatt dass jeder Wert eine separate Zeichenfolge ist.
Wenn Sie nur die Zeichenfolgenwerte für jede Zeile in einem Array benötigen, können Sie den Parser direkt verwenden.
%Vor%Aktualisieren
Version 3 unterstützt das Lesen und Schreiben von IEnumerable-Eigenschaften.
Bitte versuchen Sie es. Das hat für mich funktioniert.
%Vor%Server ist eine Entitätsklasse. So habe ich erstellt.
%Vor% Sie sind nah dran. Es versucht nicht, die Zeile in eine Zeichenfolge umzuwandeln. CsvHelper versucht, jedes Feld in der Zeile den Eigenschaften des von Ihnen angegebenen Typs zuzuordnen, wobei die in einer Kopfzeile angegebenen Namen verwendet werden. Außerdem versteht es nicht, wie man das mit IEnumerable
types macht (was string
implementiert), also wird es nur ausgelöst, wenn das automatische Mapping beim Testen des Typs an diesen Punkt gelangt.
Das ist eine ganze Menge Komplikation für das, was Sie tun. Wenn Ihr Dateiformat ausreichend einfach ist, was Ihnen bekannt vorkommt - bekanntes Feldformat, weder maskierte noch in Anführungszeichen gesetzte Trennzeichen - sehe ich keinen Grund, warum Sie den Mehraufwand beim Importieren einer Bibliothek übernehmen müssen. Sie sollten die Werte bei Bedarf mit System.IO.File.ReadLines()
und String.Split()
aufzählen können.