CSV-Parser / Reader für C #? [geschlossen]

89

Gibt es eine gute und kostenlose Implementierung des CSV-Parsers unter einer liberalen Lizenz? Ein Gegenstück zu SuperCSV für Java, vielleicht ein Port?

Bartosz Radaczyński
quelle
5
using Microsoft.VisualBasic.FileIO.TextFieldParser;
1
Nicht konstruktiv? SO Admins sind so verrückt. Dies ist eine sehr hilfreiche Frage.
Richard

Antworten:

70

FileHelpers Open Source Library .

Keltex
quelle
24
FileHelpers (zumindest für CSV) erfordert, dass Sie "eine Klasse definieren, die dem Datensatz in der Quelle (Datei) zugeordnet ist", "Sie müssen eine Datensatzzuordnungsklasse deklarieren" usw. und dies ist nicht so heiß. Ich möchte CSV in eine DataTable konvertieren, ohne vorher zu wissen, wie viele Spalten zu erwarten sind.
Konrad Morawski
53

Es gibt eine nette Implementierung auf CodeProject :

Um mehr bodenständige Zahlen zu erhalten, verarbeitete der Leser mit einer 45-MB-CSV-Datei mit 145 Feldern und 50.000 Datensätzen etwa 30 MB / s. Alles in allem dauerte es also 1,5 Sekunden! Die Maschinenspezifikationen waren P4 3,0 GHz, 1024 MB.

Anton Gogolev
quelle
(Ich nehme meine +1 zurück): Ich habe gerade den Lumenworks Fast CSV-Reader für eine 53-MB-Datei kaputt gemacht. Es sieht so aus, als ob das Zeilen-Caching nach 43.000 Zeilen fehlgeschlagen ist und den Puffer verschlüsselt hat. Versuchte das Microsoft.VisualBasic.FileIO.TextFieldParseund es hat den Trick getan.
Gone Coding
11

Sie können eine CSV-Datei in DataTable laden.

Beispielcode -

static DataTable CsvToDataTable(string strFileName)
{
    DataTable dataTable = new DataTable("DataTable Name");

    using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Directory.GetCurrentDirectory() + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\""))
    {
        conn.Open();
        string strQuery = "SELECT * FROM [" + strFileName + "]";
        OleDbDataAdapter adapter = 
            new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
        adapter.Fill(dataTable);
    }
    return dataTable;
}

Stellen Sie sicher, dass Sie Ihr Projekt auf dem x86-Prozessor kompilieren. Es funktioniert nicht für x64.

Maxime
quelle
1
Dies funktionierte ziemlich gut für mich, da ich bei den eingebauten ODBC- oder OLEDB-Bibliotheken bleiben wollte. Übrigens enthält das Folgende zusätzliche Codebeispiele für OLEDB und ODBC: csvreader.com/csv_benchmarks.php
Meringros
5
Dies funktioniert leider nicht mit 64-Bit.
DenNukem
7

versuchen Sie es mit Filehelpers. Arbeiten Sie erstaunlich gut. Ich verwende es, um jeden Tag eine 100-MB-Datei zu analysieren.

Niemand
quelle
4

Haben Sie die FileHelpers-Bibliothek ausprobiert? Es ist kostenlos, Open Source und kann zum Parsen von CSV-Dateien verwendet werden.

JaredPar
quelle
3

Ich habe angefangen, CSV Parser zu verwenden, der Teil von CommonLibrary.NET ist .

Es verwendet .NET 3.5, verfügt über eine einfache API und praktische Überladungen / Methoden und Lamdas für Iterationen.

Ich habe keine Benchmarks für diese wie oben, aber das Schöne daran ist, dass es nur eine Komponente einer Bibliothek ist, die Java Commons ähnelt. So bekomme ich auch einen Kommandozeilen-Parser, unter anderem eine Repository-Implementierung.

zhao
quelle