Parser / lettore CSV per C #? [chiuso]


89

c'è una buona e gratuita implementazione del parser CSV disponibile con qualche licenza liberale? Qualche controparte di SuperCSV per Java, forse un port?



5
using Microsoft.VisualBasic.FileIO.TextFieldParser;


1
Non costruttivo? COSÌ gli amministratori sono così pazzi. Questa è una domanda MOLTO utile.
richard

Risposte:


70

24
FileHelpers (almeno per CSV) richiede di "definire una classe che mappa al record nella sorgente (file)", "è necessario dichiarare una classe di mappatura record" ecc. E questo non è così caldo. Vorrei convertire CSV in un DataTable, non sapendo in anticipo quante colonne aspettarsi.
Konrad Morawski

53

C'è una bella implementazione su CodeProject :

Per fornire numeri più concreti, con un file CSV da 45 MB contenente 145 campi e 50.000 record, il lettore stava elaborando circa 30 MB / sec. Quindi, tutto sommato, ci sono voluti 1,5 secondi! Le specifiche della macchina erano P4 3.0 GHz, 1024 MB.


(riprendendo il mio +1): ho appena rotto il lettore CSV veloce di lumenworks su un file da 53 Mb. Sembra che la memorizzazione nella cache della riga non sia riuscita dopo 43.000 righe e abbia codificato il buffer. Ho provato Microsoft.VisualBasic.FileIO.TextFieldParsee ha funzionato.
Gone Coding

11

Puoi caricare un file CSV in DataTable.

Codice di esempio -

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;
}

Assicurati di compilare il tuo progetto su un processore x86. Non funziona per x64.


1
questo ha funzionato abbastanza bene per me dato che volevo rimanere con le librerie ODBC o OLEDB integrate. A proposito, quanto segue ha esempi di codice aggiuntivi sia per OLEDB che per ODBC: csvreader.com/csv_benchmarks.php
Meringros

5
Purtroppo non funziona a 64 bit.
DenNukem


7

prova filehelpers Funziona incredibilmente bene. Lo sto usando per analizzare un file da 100 MB ogni giorno.



3

Ho iniziato a utilizzare CSV Parser che fa parte di CommonLibrary.NET .

Utilizza .NET 3.5, ha una semplice API e convenienti metodi / sovraccarichi e lamda per le iterazioni.

Non ho benchmark per questo come sopra, ma la cosa bella di questo è che è solo un componente di una libreria simile a Java Commons. Quindi ottengo anche un parser della riga di comando, l'implementazione del repository tra le altre cose.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.