Analisador / leitor de CSV para C #? [fechadas]

89

existe uma implementação boa e gratuita do analisador CSV disponível sob alguma licença liberal? Alguma contraparte do SuperCSV para Java, talvez uma porta?

Bartosz Radaczyński
fonte
5
using Microsoft.VisualBasic.FileIO.TextFieldParser;
1
Não é construtivo? ASSIM, os administradores são tão loucos. Esta é uma pergunta MUITO útil.
richard de

Respostas:

70

Biblioteca de código aberto FileHelpers .

Keltex
fonte
24
FileHelpers (para CSV pelo menos) requer que você "defina uma classe que mapeie para o registro na origem (arquivo)", "você deve declarar uma Classe de mapeamento de registro" etc. e isso não é tão importante. Gostaria de converter CSV em DataTable, sem saber com antecedência quantas colunas esperar.
Konrad Morawski
53

Há uma boa implementação no CodeProject :

Para fornecer mais números reais, com um arquivo CSV de 45 MB contendo 145 campos e 50.000 registros, o leitor estava processando cerca de 30 MB / s. Resumindo, demorou 1,5 segundos! As especificações da máquina eram P4 3,0 GHz, 1024 MB.

Anton Gogolev
fonte
(pegando de volta meu +1): Acabei de quebrar o leitor Lumenworks Fast CSV em um arquivo de 53Mb. Parece que o cache de linha falhou após 43.000 linhas e embaralhou o buffer. Tentei o Microsoft.VisualBasic.FileIO.TextFieldParsee funcionou.
Gone Coding
11

Você pode carregar um arquivo CSV para DataTable.

Código de amostra -

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

Certifique-se de compilar seu projeto para o processador x86. Não funciona para x64.

Máxima
fonte
1
isso funcionou muito bem para mim, pois eu queria ficar com as bibliotecas ODBC ou OLEDB integradas. A propósito, o seguinte tem exemplos de código adicionais para OLEDB e ODBC: csvreader.com/csv_benchmarks.php
Meringros,
5
Isso não está funcionando em 64 bits, infelizmente.
DenNukem
7

tente filehelpers Funcionam incrivelmente bem. Estou usando-o para analisar um arquivo de 100 MB todos os dias.

ninguém
fonte
4

Você já experimentou a biblioteca FileHelpers? É gratuito, de código aberto e pode ser usado para analisar arquivos CSV.

JaredPar
fonte
3

Comecei a usar o CSV Parser que faz parte do CommonLibrary.NET .

Ele usa .NET 3.5, tem uma API fácil e sobrecargas / métodos e lamda convenientes para iterações.

Não tenho nenhum benchmark para este como acima, mas o bom sobre isso é que é apenas um componente de uma biblioteca semelhante ao Java Commons. Portanto, também consigo um analisador de linha de comando, implementação de repositório, entre outras coisas.

zhao
fonte