Ich bin anderer Ansicht. Dies ist definitiv eine konstruktive Frage und das erste Ergebnis bei Google für .net csv library. Obwohl anekdotisch, ist meine Behauptung, dass diese Frage in den letzten sechs Jahren mehr als 22000 Mal gestellt wurde.
Shovavnik
5
wahr gesagt - erster Treffer auf Google
Robetto
Antworten:
107
Versuchen Sie es mit CsvHelper . Es ist so einfach zu bedienen wie FastCsvReader und schreibt auch. Ich war in der Vergangenheit sehr zufrieden mit FastCsvReader, aber ich brauchte etwas, das auch schreibt, und war mit FileHelpers nicht zufrieden.
Lesen:
var csv =newCsvReader( stream );var myCustomTypeList = csv.GetRecords<MyCustomType>();
Schreiben:
var csv =newCsvWriter( stream );
csv.WriteRecords( myCustomTypeList );
Vollständige Offenlegung: Ich bin der Autor dieser Bibliothek.
Danke, Josh. Ich habe es ausprobiert und es war sowohl schnell als auch speichereffizient. Ich denke, die Dokumentation könnte für Erstanwender etwas verbessert werden, aber es war definitiv ausreichend.
Sam
Gibt es eine Möglichkeit, diese Bibliothek ohne einen benutzerdefinierten Typ zu verwenden, sodass ich einfach mein Tabellenraster (benutzerdefiniert) durchlaufen und den Header ausschreiben und dann jedes Zeilenfeld übergeben kann? Ich suche nur nach einer Möglichkeit, Fehler in den Dateien zu verhindern (ordnungsgemäßes Escaping usw.).
@ Zimano Nicht wahr. Sie können einzelne Felder lesen oder einfach nur ein String-Array für die Zeile abrufen. Lesen Sie die Dokumentation. joshclose.github.io/CsvHelper
Josh Close
@JoshClose Oh, das ist gut zu hören, danke! Ich habe nur die Anleitung für die ersten Schritte hier gelesen : joshclose.github.io/CsvHelper/… und sie enthielt nicht meinen Anwendungsfall. Ich hätte weiter schauen sollen, entschuldige mich. Auf dieser Seite heißt es jedoch, dass die Verwendung einer Zuordnung die empfohlene Methode ist CsvHelper. Vielleicht könnte es an dieser Stelle einige alternative Lesestrategien bieten? Ich habe meine ursprüngliche Bemerkung übrigens gelöscht, da sie jetzt irrelevant ist :-)
Zimano
21
Es gibt einige Optionen, direkt im Framework.
Am einfachsten ist es, auf Microsoft.VisualBasic zu verweisen und dann TextFieldParser zu verwenden . Es ist ein voll funktionsfähiger CSV-Reader im Kernframework.
Ich habe mich immer gefragt, warum es in der Microsoft.VisualBasic-Assembly enthalten ist ... Hat MS gedacht, dass C # -Entwickler CSV nicht verwenden?
Thomas Levesque
4
@Thomas: Zumal viele C # -Entwickler bei dem Gedanken
2
Ja - da sind viele nette "Goodies" drin. Ich denke, es liegt eher daran, dass VB einige Sprachkonstrukte hat, die ursprünglich nicht wirklich im Framework berücksichtigt wurden, aber sie hätten VB6-Benutzer niemals vermitteln können, ohne sie zu implementieren. Die Namespaces Devices und ApplicationServices enthalten alle möglichen nützlichen Funktionen.
Reed Copsey
20
@ Roboto, jeder C # -Entwickler, der in seinem Projekt auf Microsoft.VisualBasic verweist, ist ein ignoranter Sprach-Snob. Schlimmer noch, sie verstehen .NET überhaupt nicht.
Sebastien Lorion hat einen großartigen CSVLeser auf CodeProject namens A Fast CSV Reader . Wahrscheinlich eines der besten für C # und es ist kostenlos.
Verwenden Sie zum Schreiben einfach StreamWriter.
Hier ist ein Code zum Schreiben DataGridVieweiner Datei in eine Datei:
privatevoid exportDGVToCSV(string filename){if(dataGridView1.Columns.Count!=0){
using (Stream stream =File.OpenWrite(filename)){
stream.SetLength(0);
using (StreamWriter writer =newStreamWriter(stream)){// loop through each row of our DataGridViewforeach(DataGridViewRow row in dataGridView1.Rows){string line =string.Join(",", row.Cells.Select(x => $"{x}"));
writer.WriteLine(line);}
writer.Flush();}};}}
Das Schreiben von CSV ist einfach - verwenden Sie einfach eine normale Textausgabemethode und trennen Sie diese durch Kommas. Sie brauchen wirklich nur eine Bibliothek / einen benutzerdefinierten Handler zum Lesen ...
Reed Copsey
10
@Reed: Es ist nicht zu trivial, wenn Kommas und Anführungszeichen korrekt maskiert werden sollen. Ich bin mir nicht einmal sicher, ob es dafür eine Standardisierung gibt, aber es ist sehr üblich, dies zu tun.
Stefan Steinegger
26
Das Schreiben von CSV ist etwas komplexer. Wenn die Daten, die in der CSV-Datei ausgedrückt werden sollen, Kommas oder neue Zeilen enthalten, müssen Sie die Daten mit Anführungszeichen umgeben. Wenn die neu mit Anführungszeichen versehenen Daten ein Anführungszeichen enthalten, müssen Sie das Anführungszeichen mit doppelten Anführungszeichen umgehen. Sie könnten diese Logik sicherlich selbst codieren, aber es wäre schön, wenn eine Bibliothek dies für Sie tun würde.
Nun, ich habe es getan, aber aus irgendeinem seltsamen Grund sind FileHelpers zufällig zusammengebrochen. Darüber hinaus befindet sich die FileHelpers-Bibliothek schon lange nicht mehr in der Entwicklung.
Erik Schierboom
1
FileHelpers werden jetzt aktiv entwickelt, siehe GitHub .
Ich sollte sagen, dass ich Filehelpers in einigen Szenarien als einschränkend empfinde und stattdessen den Fast CSV Reader verwende . Wenn Sie nach meiner Erfahrung das Format Ihrer CSV-Datei oder die Importzuordnung erst zur Laufzeit kennen, ist dies die bessere Bibliothek.
.net csv library
. Obwohl anekdotisch, ist meine Behauptung, dass diese Frage in den letzten sechs Jahren mehr als 22000 Mal gestellt wurde.Antworten:
Versuchen Sie es mit CsvHelper . Es ist so einfach zu bedienen wie FastCsvReader und schreibt auch. Ich war in der Vergangenheit sehr zufrieden mit FastCsvReader, aber ich brauchte etwas, das auch schreibt, und war mit FileHelpers nicht zufrieden.
Lesen:
Schreiben:
Vollständige Offenlegung: Ich bin der Autor dieser Bibliothek.
quelle
WriteField
. Überprüfen Sie die Dokumente hier joshclose.github.io/CsvHelperCsvHelper
. Vielleicht könnte es an dieser Stelle einige alternative Lesestrategien bieten? Ich habe meine ursprüngliche Bemerkung übrigens gelöscht, da sie jetzt irrelevant ist :-)Es gibt einige Optionen, direkt im Framework.
Am einfachsten ist es, auf Microsoft.VisualBasic zu verweisen und dann TextFieldParser zu verwenden . Es ist ein voll funktionsfähiger CSV-Reader im Kernframework.
Eine weitere gute Alternative ist die Verwendung von Datasets zum Lesen von CSV-Dateien .
quelle
Sebastien Lorion hat einen großartigen
CSV
Leser auf CodeProject namens A Fast CSV Reader . Wahrscheinlich eines der besten für C # und es ist kostenlos.Verwenden Sie zum Schreiben einfach
StreamWriter
.Hier ist ein Code zum Schreiben
DataGridView
einer Datei in eine Datei:quelle
Ja - obwohl ich davon ausgehe, dass Sie tatsächlich nach Einzelheiten fragen?
Versuchen Sie FileHelpers
quelle
Es gibt Dutzende.
http://www.filehelpers.net/ ist eine der häufigsten.
Ich sollte sagen, dass ich Filehelpers in einigen Szenarien als einschränkend empfinde und stattdessen den Fast CSV Reader verwende . Wenn Sie nach meiner Erfahrung das Format Ihrer CSV-Datei oder die Importzuordnung erst zur Laufzeit kennen, ist dies die bessere Bibliothek.
quelle