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?



5
using Microsoft.VisualBasic.FileIO.TextFieldParser;


1
Nicht konstruktiv? SO Admins sind so verrückt. Dies ist eine sehr hilfreiche Frage.
Richard

Antworten:


70

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.


(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.


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.



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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.