Analizador / lector de CSV para C #? [cerrado]

89

¿Existe una implementación buena y gratuita del analizador CSV disponible bajo alguna licencia liberal? ¿Alguna contraparte de SuperCSV para Java, quizás un puerto?

Bartosz Radaczyński
fuente
5
utilizando Microsoft.VisualBasic.FileIO.TextFieldParser;
1
¿No es constructivo? Los administradores están tan locos. Esta es una pregunta MUY útil.
Richard

Respuestas:

70

Biblioteca de código abierto FileHelpers .

Keltex
fuente
24
FileHelpers (para CSV al menos) requiere que "defina una clase que se asigne al registro en la fuente (archivo)", "debe declarar una clase de asignación de registros", etc. y esto no es tan interesante. Me gustaría convertir CSV en un DataTable, sin saber de antemano cuántas columnas esperar.
Konrad Morawski
53

Hay una buena implementación en CodeProject :

Para dar más números reales, con un archivo CSV de 45 MB que contiene 145 campos y 50.000 registros, el lector estaba procesando unos 30 MB / seg. Así que, en general, ¡tomó 1,5 segundos! Las especificaciones de la máquina fueron P4 3.0 GHz, 1024 MB.

Anton Gogolev
fuente
(recuperando mi +1): Acabo de romper el lector de CSV rápido de lumenworks en un archivo de 53 Mb. Parece que el almacenamiento en caché de la línea falló después de 43.000 filas y codificó el búfer. Probé Microsoft.VisualBasic.FileIO.TextFieldParsey funcionó.
Gone Coding
11

Puede cargar un archivo CSV en DataTable.

Código de muestra -

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 compilar su proyecto en un procesador x86. No funciona para x64.

Máxima
fuente
1
esto funcionó bastante bien para mí, ya que quería quedarme con las bibliotecas ODBC u OLEDB integradas. Por cierto, lo siguiente tiene ejemplos de código adicionales para OLEDB y ODBC: csvreader.com/csv_benchmarks.php
Meringros
5
Esto no funciona en 64 bits, por desgracia.
DenNukem
7

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

Ninguno
fuente
4

¿Ha probado la biblioteca FileHelpers? Es gratuito, de código abierto y se puede utilizar para analizar archivos CSV.

JaredPar
fuente
3

Comencé a usar CSV Parser que es parte de CommonLibrary.NET .

Utiliza .NET 3.5, tiene una API sencilla y convenientes sobrecargas / métodos y lamda para 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. Entonces también obtengo un analizador de línea de comandos, implementación de repositorio, entre otras cosas.

zhao
fuente