c# .net csv oledb

c# - ¿Hay una forma "adecuada" de leer archivos CSV



.net oledb (7)

Posible duplicado:
Importaciones de archivos CSV en .Net

En .net, ¿hay una biblioteca estándar que debería usarse para leer archivos csv? Todas las muestras en la web hacen rodar su propio lector / analizador csv, o usan OleDb.

No es un problema usar cualquiera de estas soluciones, me preguntaba si hay una biblioteca generalmente aceptada (no la que puedo encontrar) o alguna otra forma "adecuada" de hacerlo.


Después de un poco más de investigación, también hay esto: http://www.filehelpers.com/

Parece un marco completo alrededor de la lectura de archivos, y no solo de archivos csv.

(nota: solo lea las cosas en el sitio web, no lo he usado todavía)


El espacio de nombres de VB tiene una gran clase TextFieldParser . Lo sé, a las personas c # no les gusta hacer referencia a una biblioteca de ese lenguaje "básico", pero es bastante bueno.

Se encuentra en Microsoft.VisualBasic.FileIO.TextFieldParser

Solía ​​meterme con OLEDB, crear archivos de definición de columnas, etc., pero creo que TextFieldParser es una herramienta muy simple y útil para analizar cualquier archivo delimitado.


Estoy bastante seguro de que puede leer un archivo CSV en una tabla de datos con una línea de código. Una vez que esté en un DataTable, puede ordenar, filtrar, iterar, etc.

Esta pregunta tiene algunos ejemplos para leer CSV en tablas de datos.


Pruebe CsvHelper (una biblioteca que mantengo). También está disponible a través de NuGet .

CsvHelper le permite leer su archivo CSV directamente en su clase personalizada.

var streamReader = // Create a reader to your CSV file. var csvReader = new CsvReader( streamReader ); List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();

CsvReader descubrirá automáticamente cómo hacer coincidir los nombres de propiedades en función de la fila del encabezado (esto es configurable). Utiliza árboles de expresión compilados en lugar de reflexión, por lo que es muy rápido.

También es muy extensible y configurable.


Una de las razones por las que muchas personas escriben las suyas es que el CSV no es tan simple . Por ejemplo:

  1. ¿La primera fila contiene nombres de campo, o no?
  2. ¿Apoya fechas? Si, entonces, ¿están citados, rodeados por # marcas, en un determinado orden día-mes-año?
  3. ¿Admite los saltos de línea que se producen dentro de los valores de texto entre comillas? ¿O eso divide el récord?
  4. ¿Cómo escapar de una cita dentro de una cadena entre comillas? ¿Duplica la cotización o usa una barra invertida u otro personaje de escape?
  5. ¿Qué codificación de caracteres son compatibles?
  6. ¿Cómo maneja los personajes de control escapados? & # XX; o / uXXXX o algún otro método?

Estas son algunas de las razones por las que las personas escriben sus propios analizadores, porque están bloqueados al leer los archivos creados con todas estas configuraciones diferentes . O escriben sus propios serializadores, porque el sistema de destino tiene un montón de estas idiosincrasias .

Si no le importan estos problemas, solo use la biblioteca más conveniente. Pero entiende que están ahí.


KBCsv es otra opción, especialmente si necesita eficiencia y la capacidad de trabajar con archivos CSV masivos.

Divulgación: escribí KBCsv, de ahí la "KB";)


CsvReader es bastante bueno ... no es Microsoft, pero funciona muy bien y es mucho más rápido que algunas de las alternativas (OleDb heredado, etc.).