2009-12-21 12 views
83

¿Hay alguna biblioteca de lectores/escritores CSV en C#?¿Hay bibliotecas de lectores/escritores CSV en C#?

+37

Me gustaría diferir. Esta es definitivamente una pregunta constructiva y el primer resultado en google para '.net csv library'. La evidencia, aunque anecdótica, para mi reclamo es que esta pregunta ha sido vista más de 22000 veces en los últimos seis años. – shovavnik

+1

cierto dijo - primer hit en google – Robetto

Respuesta

6

Sí, ¿aunque supongo que realmente está pidiendo detalles?

Trate FileHelpers

+0

Bueno, lo hice pero por alguna extraña razón FileHelpers se rompió al azar. Además, la biblioteca FileHelpers no ha estado en desarrollo durante mucho tiempo. –

+0

FileHelpers se desarrollan activamente ahora, vea el [GitHub] (https://github.com/MarcosMeli/FileHelpers). – xmedeko

3

Hay docenas.

http://www.filehelpers.net/ es uno de los más comunes.

Debo decir que encuentro Filehelpers restrictivo en algunos escenarios, y en su lugar uso The Fast CSV Reader. Según mi experiencia, si no conoce el formato de su archivo CSV o importa la asignación hasta el tiempo de ejecución, esta es la mejor biblioteca para usar.

+0

También utilizamos Filehelpers. – Tangurena

+0

He encontrado FileHelpers como una molestia para configurar. FastCsvReader fue mucho más fácil de usar. –

+0

+1 para FastCsvReader. Excelente actuación. Pero es principalmente un lector/analizador. No es un escritor. –

14

Sebastien Lorion tiene un gran lector CSV en CodeProject llamado A Fast CSV Reader. Probablemente uno de los mejores para C# y es gratis.

En cuanto a la escritura, simplemente use StreamWriter.

Aquí hay un código repetitivo para escribir un DataGridView a un archivo:

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

Este es mi favorito. Gran pequeña biblioteca. – Alex

+0

pero ¿no puede escribir también? – mrblah

+0

Lo sé - Lo he usado durante los últimos dos años - ¡sin problemas! –

18

Hay un par de opciones, justo en el propio marco.

Una de las más fáciles es hacer referencia a Microsoft.VisualBasic, luego usar TextFieldParser. Es un lector CSV completamente funcional en el marco central.

Otra buena alternativa es use datasets to read CSV files.

+6

Siempre me pregunté por qué estaba en el ensamblado Microsoft.VisualBasic ... ¿La EM creía que los desarrolladores de C# no usaban CSV? –

+3

@Thomas: sobre todo porque muchos desarrolladores de C# se estremecen ante la idea de incluir un ensamblado de VisualBasic en sus proyectos –

+2

Sí, hay muchos buenos "objetos" allí. Creo que es más porque VB tiene algunas construcciones de lenguaje que originalmente no se consideraban originalmente en el marco, pero que nunca habrían podido hacer llegar a los usuarios de VB6 sin implementarlos. Los espacios de nombres Dispositivos y Servicios de aplicación tienen todo tipo de cosas útiles. –

73

Probar CsvHelper. Es tan fácil de usar como FastCsvReader y también lo es. He estado muy contento con FastCsvReader en el pasado, pero necesitaba algo que también lo haga, y no estaba contento con FileHelpers.

lectura:

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

Escritura:

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

Full Disclosure: Yo soy el autor de esta biblioteca.

+0

Gracias, Josh. Le di una oportunidad, y fue rápido y eficiente en la memoria. Creo que la documentación podría mejorarse un poco para los usuarios principiantes, pero definitivamente fue suficiente. – Sam

Cuestiones relacionadas