2010-12-10 6 views
0

Ich verwende ein StreamReader-Objekt, um Quelldaten für die LinqtoCSV-Bibliothek bereitzustellen. Etwas wie dieses ...Kopfzeile überspringen beim Analysieren von .csv-Datei

Ich bearbeite CSV-Dateien, die einen zusätzlichen Semikolon in der Kopfzeile z.

Header1; Header2;Header3; 

Dies löst Fehler, weil die CSVtoLinQ Bibliothek erwartet 4-Header-Namen anstelle von 3. kann ich ausgewählte Zeilen in ein IEnumerable-Objekt gelesen, aber ich kann den Inhalt des Streamreader-Objekts nicht direkt manipulieren. Ich würde es vorziehen, mit der Kombination von StreamReader/LinqtoCSV fortzufahren, da es viele Validierungsfunktionen bietet, aber wegen des Problems mit der Dateikopfzeile muss ich nach Alternativen suchen.

Gibt es andere csv-Importbibliotheken, die (i) feldbasierte Validierung beim Parsen einer Datei (ii) ein Mittel zum Überspringen der Kopfzeile bereitstellen?

Antwort

0

Sie könnten eine Methode schreiben, die die Datei öffnet, die Header überprüft/behebt und dann in einer neuen Datei speichert, die jetzt für den bestehenden Prozess bereit ist.

+0

Ich beendete die Bearbeitung des Bytestroms (das Objekt file.data im Beispiel) z. System.Text.UTF8Encoding enc = neu System.Text.UTF8Encoding(); Zeichenfolge csvfile = dec.GetString (newFile.Data); Zeichenfolge csvfilenew = csvfile.Replace ("header3;", "header3; dummyfieldname"); newFile.Data = enc.GetBytes (csvfilenew); Ich werde wahrscheinlich Code hinzufügen, um die Codierung der Datei usw. zu überprüfen, aber für den Moment scheint es zu funktionieren. Durch die Angabe eines Dummy-Feldnamens mit einer nullwertfähigen String-Spaltendefinition wird verhindert, dass linqtocsv eine Ausnahme auslöst. – baffled68