Estou tentando ler um *.csv
arquivo.
O *.csv
arquivo-consiste em duas colunas separadas por ponto e vírgula (" ; ").
Consigo ler o *.csv
arquivo-usando StreamReader e separar cada linha usando a Split()
função Eu quero armazenar cada coluna em uma matriz separada e exibi-la.
É possível fazer isso?
";"
como separador ... isso fez CSV um não-padrão imo :(Respostas:
Você pode fazer assim:
fonte
using
cláusula aqui, ou pelo menos manualmenteClose()
oreader
como é umIDisposible
recurso.column1;"Special ; char in string";column3
- tools.ietf.org/html/rfc4180Meu analisador CSV favorito é um construído na biblioteca .NET. Este é um tesouro oculto dentro do namespace Microsoft.VisualBasic. Abaixo está um código de exemplo:
Lembre-se de adicionar referência a
Microsoft.VisualBasic
Mais detalhes sobre o analisador são fornecidos aqui: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html
fonte
Microsoft.VisualBasic
assembly da estrutura, pois normalmente não é referenciado por padrão.Maneira LINQ:
^^ Errado - Editar por Nick
Parece que o atendedor original estava tentando preencher
csv
com uma matriz bidimensional - uma matriz contendo matrizes. Cada item na primeira matriz contém uma matriz que representa esse número de linha com cada item da matriz aninhada que contém os dados para essa coluna específica.fonte
Você não pode criar uma matriz imediatamente porque precisa saber o número de linhas desde o início (e isso exigiria a leitura do arquivo csv duas vezes)
Você pode armazenar valores em dois
List<T>
e depois usá-los ou converter em uma matriz usandoList<T>.ToArray()
Exemplo muito simples:
NB
Observe que este é apenas um exemplo muito simples . O uso
string.Split
não leva em consideração os casos em que alguns registros contêm o separador;
dentro dele.Para uma abordagem mais segura, considere usar algumas bibliotecas específicas de csv como CsvHelper no nuget.
fonte
;
fazer parte do valor, por exemplo"value with ; inside it"
. Valores surround CSV contendo caracteres especiais com aspas duplas para dizer que é uma sequência literal.Acabei de encontrar esta biblioteca: https://github.com/JoshClose/CsvHelper
Muito intuitivo e fácil de usar. Também possui um pacote nuget que é rápido de implementar: http://nuget.org/packages/CsvHelper/1.17.0 . Também parece ser mantido ativamente do que eu gosto.
É fácil configurá-lo para usar um ponto-e-vírgula: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations
fonte
Microsoft.VisualBasic.FileIO.TextFieldParser
(cf. resposta de @ Habeeb)?Eu costumo usar esse analisador do codeproject , já que há um monte de caracteres escapados e similares que ele manipula para mim.
fonte
Aqui está minha variação da resposta mais votada:
A
csv
variável pode ser usada como no exemplo a seguir:fonte
Se você precisar pular linhas e / ou colunas (de cabeça), poderá usá-lo para criar uma matriz bidimensional:
Isso é bastante útil se você precisar moldar os dados antes de processá-los ainda mais (supondo que as duas primeiras linhas consistam no título e a primeira coluna seja um título de linha - que você não precisa ter na matriz porque apenas quer considerar os dados).
NB Você pode facilmente obter as manchetes e a 1ª coluna usando o seguinte código:
Este exemplo de código assume a seguinte estrutura do seu
*.csv
arquivo:Nota: Se você precisar pular linhas vazias - o que pode ser útil algumas vezes, você pode fazê-lo inserindo
entre a
from
easelect
declaração nos LINQ exemplos de código acima.fonte
Você pode usar a DLL do Microsoft.VisualBasic.FileIO.TextFieldParser em C # para obter melhor desempenho
Veja abaixo o exemplo de código do artigo acima
fonte
Oi pessoal, Eu criei uma classe estática para fazer isso. + verificação da coluna + remoção do sinal de cota
fonte
fonte
Aqui está um caso especial em que um dos campos de dados possui ponto e vírgula (";") como parte dos dados. Nesse caso, a maioria das respostas acima falhará.
Solução, nesse caso, será
fonte
A biblioteca Angara.Table de código aberto permite carregar CSV em colunas digitadas, para que você possa obter as matrizes das colunas. Cada coluna pode ser indexada por nome ou índice. Consulte http://predictionmachines.github.io/Angara.Table/saveload.html .
A biblioteca segue RFC4180 para CSV; permite inferência de tipo e seqüências de linhas múltiplas.
Exemplo:
Você pode ver um tipo de coluna usando o tipo Coluna, por exemplo
Como a biblioteca é focada em F #, pode ser necessário adicionar uma referência ao assembly FSharp.Core 4.4; clique em 'Add Reference' no projeto e escolha FSharp.Core 4.4 em "Assemblies" -> "Extensions".
fonte
Passei algumas horas procurando uma biblioteca certa, mas finalmente escrevi meu próprio código :) Você pode ler o arquivo (ou banco de dados) com as ferramentas que deseja e, em seguida, aplicar a seguinte rotina a cada linha:
fonte
Uso o csvreader.com (componente pago) há anos e nunca tive um problema. É sólido, pequeno e rápido, mas você precisa pagar por isso. Você pode definir o delimitador para o que quiser.
fonte
Eu sou apenas um aluno trabalhando na tese de mestrado, mas foi assim que resolvi e funcionou bem para mim. Primeiro, você seleciona seu arquivo do diretório (apenas no formato csv) e depois coloca os dados nas listas.
fonte
Ainda errado. Você precisa compensar "" entre aspas. Aqui está a minha solução estilo csv da Microsoft.
fonte
Eu tenho uma biblioteca que está fazendo exatamente o que você precisa.
Algum tempo atrás, eu escrevi uma biblioteca simples e rápida o suficiente para trabalhar com arquivos CSV. Você pode encontrá-lo no seguinte link: https://github.com/ukushu/DataExporter
Funciona com CSV, como em um array de 2 dimensões. Exatamente como você precisa.
Como exemplo, no caso de você precisar de todos os valores da 3ª linha, basta escrever:
ou para ler a segunda célula de
fonte
Veja isso
using CsvFramework;
using System.Collections.Generic;
namespace CvsParser {
}
fonte