Existe uma maneira padrão / oficial / recomendada de analisar arquivos CSV em C #? Eu não quero rolar meu próprio analisador.
Além disso, já vi casos de pessoas que usam ODBC / OLE DB para ler CSV por meio do driver de texto, e muitas pessoas desencorajam isso devido a seus "inconvenientes". Quais são essas desvantagens?
Idealmente, estou procurando uma maneira pela qual possa ler o CSV pelo nome da coluna, usando o primeiro registro como o cabeçalho / nome do campo. Algumas das respostas dadas estão corretas, mas funcionam basicamente para desserializar o arquivo em classes.
Um analisador de CSV agora faz parte do .NET Framework.
Adicione uma referência ao Microsoft.VisualBasic.dll (funciona bem em C #, não importa o nome)
Os documentos estão aqui - Classe TextFieldParser
PS Se você precisar de um exportador de CSV , tente CsvExport (discl: sou um dos contribuidores)
fonte
TextFieldParser.ReadLine()
. Consulte TextFieldParser docsO CsvHelper (uma biblioteca que mantenho) lerá um arquivo CSV em objetos personalizados.
Às vezes você não possui os objetos que está tentando ler. Nesse caso, você pode usar o mapeamento fluente porque não pode colocar atributos na classe.
EDITAR:
O CsvReader agora exige que o CultureInfo seja passado para o construtor ( https://github.com/JoshClose/CsvHelper/issues/1441 ).
Exemplo:
fonte
Em um aplicativo comercial, eu uso o projeto Open Source em codeproject.com, CSVReader .
Funciona bem e tem bom desempenho. Há alguns testes comparativos no link que forneci.
Um exemplo simples, copiado da página do projeto:
Como você pode ver, é muito fácil trabalhar com isso.
fonte
Eu sei que é um pouco tarde, mas só encontrei uma biblioteca
Microsoft.VisualBasic.FileIO
que temTextFieldParser
classe para processar arquivos csv.fonte
Se você precisar apenas ler arquivos csv, recomendo esta biblioteca: Um leitor rápido de CSV
Se você também precisar gerar arquivos csv, use este: FileHelpers
Ambos são gratuitos e de código aberto.
fonte
Aqui está uma classe auxiliar que eu uso com frequência, caso alguém volte a esse segmento (eu queria compartilhá-lo).
Eu uso isso para a simplicidade de portá-lo em projetos prontos para uso:
E use-o como:
[Atualizado csv helper: bug corrigido onde o último caractere da nova linha criou uma nova linha]
fonte
Esta solução está usando o assembly oficial Microsoft.VisualBasic para analisar o CSV.
Vantagens:
Código:
fonte
Eu escrevi TinyCsvParser for .NET, que é um dos analisadores .NET mais rápidos e altamente configuráveis para analisar praticamente qualquer formato CSV.
É liberado sob a licença MIT:
Você pode usar o NuGet para instalá-lo. Execute o seguinte comando no Console do Gerenciador de Pacotes .
Uso
Imagine que temos uma lista de pessoas em um arquivo CSV
persons.csv
com seu nome, sobrenome e data de nascimento.O modelo de domínio correspondente em nosso sistema pode se parecer com isso.
Ao usar o TinyCsvParser, é necessário definir o mapeamento entre as colunas nos dados CSV e a propriedade no seu modelo de domínio.
E então podemos usar o mapeamento para analisar os dados CSV com a
CsvParser
.Guia de usuario
Um Guia do Usuário completo está disponível em:
fonte
Aqui está minha implementação do KISS ...
fonte
Algum tempo atrás, eu escrevi uma classe simples para leitura / gravação de CSV com base na
Microsoft.VisualBasic
biblioteca. Usando esta classe simples, você poderá trabalhar com CSV como na matriz de 2 dimensões. Você pode encontrar minha turma no seguinte link: https://github.com/ukushu/DataExporterExemplo simples de uso:
Para ler apenas o cabeçalho, você precisa ler
csv.Rows[0]
células :)fonte
Solução de arquivo de origem única para necessidades simples de análise, útil. Lida com todos os casos extremos desagradáveis. Como normalização de nova linha e manipulação de novas linhas em literais de string entre aspas. Não há de quê!
Se o arquivo CSV tiver um cabeçalho, basta ler os nomes das colunas (e calcular os índices das colunas) da primeira linha. Simples assim.
Observe que esse
Dump
é um método LINQPad, você pode removê-lo se não estiver usando o LINQPad.fonte
Outro nesta lista, o Cinchoo ETL - uma biblioteca de código aberto para ler e gravar vários formatos de arquivo (CSV, arquivo simples, Xml, JSON etc.)
A amostra abaixo mostra como ler o arquivo CSV rapidamente (nenhum objeto POCO é necessário)
A amostra abaixo mostra como ler o arquivo CSV usando o objeto POCO
Confira os artigos no CodeProject sobre como usá-lo.
fonte
Baseado no post de unlimit em Como dividir corretamente um CSV usando a função C # split ()? :
NOTA: isso não processa vírgulas com escape / aninhado, etc. e, portanto, é adequado apenas para determinadas listas simples de CSV.
fonte
Este código lê csv para DataTable:
fonte
Se alguém quiser um snippet, poderá inserir seu código sem precisar vincular uma biblioteca ou baixar um pacote. Aqui está uma versão que eu escrevi:
fonte
Aqui está uma solução curta e simples.
fonte