Lesen Sie alle Werte aus CSV mit CsvHelper in eine Liste

8

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.

    
Ayb4btu 23.10.2015, 04:10
quelle

4 Antworten

11

Laut @Marc L'Beitrag können Sie dies versuchen:

%Vor%     
masinger 23.10.2015, 04:45
quelle
9

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.

    
Josh Close 23.10.2015 16:00
quelle
3

Bitte versuchen Sie es. Das hat für mich funktioniert.

%Vor%

Server ist eine Entitätsklasse. So habe ich erstellt.

%Vor%     
user3660719 02.06.2017 14:43
quelle
2

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.

%Vor%     
Marc L. 23.10.2015 04:34
quelle

Tags und Links