2009-12-21 17 views
83

Esistono librerie di lettori/scrittori CSV in C#?Esistono lettori CSV/librerie di scrittori in C#?

+37

Mi permetto di dissentire. Questa è sicuramente una domanda costruttiva e il primo risultato su google per '.net csv library'. La prova, sebbene aneddotica, per la mia tesi è che questa domanda è stata vista più di 22000 volte negli ultimi sei anni. – shovavnik

+1

vero detto - prima hit su google – Robetto

risposta

6

Sì, anche se presumo che in realtà chiedi informazioni specifiche?

Prova FileHelpers

+0

Beh, l'ho fatto ma per qualche strana ragione FileHelpers si è rotta casualmente. Inoltre, la libreria FileHelpers non è in sviluppo da molto tempo. –

+0

FileHelpers sono attivamente sviluppati ora, vedere [GitHub] (https://github.com/MarcosMeli/FileHelpers). – xmedeko

3

ci sono decine.

http://www.filehelpers.net/ è uno dei più comuni.

Devo dire che trovo Filehelpers restrittivo in alcuni scenari, e invece uso The Fast CSV Reader. Nella mia esperienza, se non conosci il formato del tuo file CSV o importa il mapping fino al runtime, questa è la migliore libreria da usare.

+0

Utilizziamo anche file helper. – Tangurena

+0

Ho trovato FileHelpers come una seccatura da configurare. FastCsvReader era molto più facile da usare. –

+0

+1 per FastCsvReader. Performance eccellente. Ma è principalmente un lettore/parser. Non uno scrittore. –

14

Sebastien Lorion ha un ottimo lettore CSV su CodeProject denominato A Fast CSV Reader. Probabilmente uno dei migliori per C# ed è gratuito.

Per quanto riguarda la scrittura, utilizzare solo StreamWriter.

Ecco alcuni codice standard per la scrittura di un DataGridView in un file:

private void exportDGVToCSV(string filename) 
{ 
    if (dataGridView1.Columns.Count != 0) 
    {  
     using (Stream stream = File.OpenWrite(filename)) 
     { 
      stream.SetLength(0); 
      using (StreamWriter writer = new StreamWriter(stream)) 
      { 
       // loop through each row of our DataGridView 
       foreach (DataGridViewRow row in dataGridView1.Rows) 
       { 
        string line = string.Join(",", row.Cells.Select(x => $"{x}")); 
        writer.WriteLine(line); 
       } 

       writer.Flush(); 
      } 
     }; 
    } 
} 
+1

Questo è il mio preferito. Grande piccola biblioteca. – Alex

+0

ma non è possibile scrivere anche? – mrblah

+0

Lo so - l'ho usato negli ultimi due anni - nessun problema! –

18

Ci sono un paio di opzioni, proprio nel framework stesso.

Uno dei più semplici è fare riferimento a Microsoft.VisualBasic, quindi utilizzare TextFieldParser. È un lettore CSV completamente funzionale nel framework principale.

Un'altra buona alternativa è a use datasets to read CSV files.

+6

Mi sono sempre chiesto perché fosse nell'assembly Microsoft.VisualBasic ... Pensava che gli sviluppatori C# non usassero CSV? –

+3

@Thomas: specialmente dal momento che molti sviluppatori di C# rabbrividiscono al pensiero di includere un assembly VisualBasic nei loro progetti –

+2

Sì, ci sono molte belle "chicche" lì dentro. Penso che sia più importante perché VB ha alcuni costrutti linguistici che non erano realmente considerati nel framework in origine, ma non sarebbero mai stati in grado di ottenere gli utenti VB6 senza implementarli. Gli spazi dei nomi Devices e ApplicationServices hanno tutti i tipi di cose utili. –

73

Prova CsvHelper. È facile da usare come FastCsvReader e scrive anche. Sono stato molto felice con FastCsvReader in passato, ma avevo bisogno di qualcosa che facesse anche la scrittura, e non ero soddisfatto di FileHelpers.

lettura:

var csv = new CsvReader(stream); 
var myCustomTypeList = csv.GetRecords<MyCustomType>(); 

scrittura:

var csv = new CsvWriter(stream); 
csv.WriteRecords(myCustomTypeList); 

completa Disclosure: Io sono l'autore di questa libreria.

+0

Grazie, Josh. Ho dato questo, ed era veloce ed efficiente nella memoria. Penso che la documentazione potrebbe essere migliorata un po 'per gli utenti principianti, ma era decisamente sufficiente. – Sam

Problemi correlati