2009-05-25 12 views
88

¿existe una buena y gratuita implementación del analizador CSV disponible bajo alguna licencia liberal? Algun contraparte de SuperCSV para Java, tal vez un puerto?Analizador/lector de CSV para C#?

+2

http://stackoverflow.com/questions/3507498/reading-csv-file –

+5

utilizando Microsoft.VisualBasic.FileIO.TextFieldParser; –

+1

[Top 6 formas de analizar un .CSV? Alto rendimiento!] (Http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html) –

Respuesta

70
+23

FileHelpers (para CSV al menos) requiere que "defina una clase que se correlacione con el registro en el origen (archivo)", "debe declarar una clase de mapeo de registros", etc. y esto no está tan caliente. Me gustaría convertir CSV en una DataTable, sin saber de antemano cuántas columnas esperar. –

53

Hay una buena aplicación en CodeProject:

para dar más abajo para los números de la tierra, con un archivo CSV 45 MB que contiene 145 campos y 50.000 registros, el lector estaba procesando alrededor de 30 MB/seg. ¡Así que en total, tomó 1.5 segundos! Las especificaciones de la máquina eran P4 3.0 GHz, 1024 MB.

+0

(recuperando mi +1): acabo de romper el lector de Fast CSV de lumenworks en un archivo de 53Mb. Parece que el almacenamiento en caché de línea falló después de 43,000 filas y revuelto el buffer. Intentó el 'Microsoft.VisualBasic.FileIO.TextFieldParse' y lo hizo. –

7

prueba filehelpers Trabaja increíblemente bien. Lo estoy usando para analizar un archivo de 100 MB todos los días.

3

He empezado a utilizar analizador CSV que forma parte de la CommonLibrary.NET.

Utiliza .NET 3.5, tiene una API fácil, y sobrecargas/métodos convenientes & lamda para las iteraciones.

No tengo ningún punto de referencia para este como el anterior, pero lo bueno de esto es que es solo un componente de una biblioteca similar a Java Commons. Así que también obtengo un analizador de línea de comandos, implementación de repositorio, entre otras cosas.

10

Puede cargar un archivo CSV en DataTable.

Código de ejemplo -

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

Asegúrese de que se compila el proyecto para procesador x86. No funciona para x64.

+1

esto funcionó bastante bien para mí, ya que quería permanecer con las bibliotecas integradas ODBC o OLEDB. Por cierto, el siguiente tiene muestras de código adicionales para OLEDB y ODBC: http://www.csvreader.com/csv_benchmarks.php – Meringros

+5

Esto no está funcionando en 64 bits, por desgracia. – DenNukem

+0

Dos enlaces que pueden ser útiles con respecto a esta respuesta: 1. [C# Tutorial - Uso del Analizador OLEDB CSV incorporado] (http://tech.pro/tutorial/803/csharp-tutorial-using-the-built- in-oledb-csv-parser) 2. [Cómo recuperar el esquema de columna mediante el método DataReader GetSchemaTable y Visual C# .NET] (http://support.microsoft.com/kb/310107) – shawad