Eu peço desculpa mas não concordo. Esta é definitivamente uma pergunta construtiva e o primeiro resultado no google para .net csv library. A evidência, embora anedótica, para minha afirmação é que esta pergunta foi vista mais de 22.000 vezes nos últimos seis anos.
shovavnik
5
verdade disse - primeiro acesso no google
Robetto de
Respostas:
107
Experimente o CsvHelper . É tão fácil de usar quanto FastCsvReader e também escreve. Estive muito feliz com FastCsvReader no passado, mas precisava de algo que também escrevesse e não estava feliz com FileHelpers.
Lendo:
var csv =newCsvReader( stream );var myCustomTypeList = csv.GetRecords<MyCustomType>();
Escrevendo:
var csv =newCsvWriter( stream );
csv.WriteRecords( myCustomTypeList );
Divulgação completa: eu sou o autor desta biblioteca.
Obrigado, Josh. Eu tentei, e foi rápido e eficiente em termos de memória. Acho que a documentação poderia ser melhorada um pouco para usuários inexperientes, mas foi definitivamente suficiente.
Sam
Existe uma maneira de usar esta biblioteca sem um tipo personalizado para que eu possa apenas iterar por meio de minha grade de tabela (personalizado) e escrever o cabeçalho e, em seguida, passar cada campo de linha? Estou apenas procurando uma maneira de evitar erros nos arquivos (escapando corretamente etc).
@Zimano Não é verdade. Você pode ler campos individuais ou apenas obter uma matriz de string para a linha. Confira a documentação. joshclose.github.io/CsvHelper
Josh Close
@JoshClose Oh, é bom ouvir isso, obrigado! Eu apenas verifiquei o guia de primeiros passos aqui: joshclose.github.io/CsvHelper/… e ele não incluiu meu caso de uso. Eu deveria ter procurado mais, minhas desculpas. No entanto, nessa página diz que usar um mapeamento de algum tipo é a maneira recomendada de usar CsvHelper. Talvez pudesse oferecer algumas estratégias alternativas de leitura naquele local? A propósito, excluí meu comentário original, pois agora é irrelevante :-)
Zimano
21
Existem algumas opções, bem na própria estrutura.
Uma das mais fáceis é fazer referência a Microsoft.VisualBasic e, em seguida, usar TextFieldParser . É um leitor CSV totalmente funcional na estrutura principal.
Sempre me perguntei por que estava no assembly Microsoft.VisualBasic ... A MS achava que os desenvolvedores de C # não usavam CSV?
Thomas Levesque
4
@Thomas: especialmente porque muitos desenvolvedores C # estremecem com a ideia de incluir um assembly VisualBasic em seus projetos
2
Sim - há muitas "guloseimas" legais lá. Acho que é mais porque o VB tem algumas construções de linguagem que não foram realmente consideradas no framework originalmente, mas eles nunca seriam capazes de transmitir os usuários VB6 sem implementá-los. Os namespaces Devices e ApplicationServices têm todos os tipos de coisas úteis.
Reed Copsey
20
@Roboto, qualquer desenvolvedor C # que se encolhe ao fazer referência a Microsoft.VisualBasic em seu projeto é um esnobe de linguagem ignorante. Pior ainda, eles não entendem nada de .NET.
Sebastien Lorion tem um ótimo CSVleitor no CodeProject chamado A Fast CSV Reader . Provavelmente um dos melhores para C # e é grátis.
Quanto à escrita, apenas use StreamWriter.
Aqui está um código padrão para escrever um DataGridViewem um arquivo:
privatevoid exportDGVToCSV(string filename){if(dataGridView1.Columns.Count!=0){
using (Stream stream =File.OpenWrite(filename)){
stream.SetLength(0);
using (StreamWriter writer =newStreamWriter(stream)){// loop through each row of our DataGridViewforeach(DataGridViewRow row in dataGridView1.Rows){string line =string.Join(",", row.Cells.Select(x => $"{x}"));
writer.WriteLine(line);}
writer.Flush();}};}}
Escrever CSV é fácil - basta usar um método de saída de texto normal e separar por vírgulas. Você realmente só precisa de uma biblioteca / manipulador personalizado para leitura ...
Reed Copsey
10
@Reed: não é muito trivial se você quiser que vírgulas e aspas escapem corretamente. Não tenho certeza nem se existe uma padronização para isso, mas é muito comum fazer.
Stefan Steinegger
26
Escrever CSV é um pouco mais complexo do que isso. Se os dados que você deseja expressar no arquivo CSV contiverem vírgulas ou novas linhas, será necessário colocar os dados entre aspas. Se houver uma aspa nos dados recém-marcados com aspas, será necessário evitar a aspa com aspas duplas. Você certamente poderia codificar essa lógica sozinho, mas seria bom que uma biblioteca fizesse isso por você.
Bem, eu fiz, mas por alguma razão estranha, o FileHelpers quebrou aleatoriamente. Além disso, a biblioteca FileHelpers não está em desenvolvimento há muito tempo.
Erik Schierboom
1
FileHelpers são ativamente desenvolvidos agora, consulte o GitHub .
Devo dizer que acho o Filehelpers restritivo em alguns cenários e, em vez disso, uso o Fast CSV Reader . Na minha experiência, se você não souber o formato do seu arquivo CSV ou importar o mapeamento até o tempo de execução - esta é a melhor biblioteca para usar.
.net csv library
. A evidência, embora anedótica, para minha afirmação é que esta pergunta foi vista mais de 22.000 vezes nos últimos seis anos.Respostas:
Experimente o CsvHelper . É tão fácil de usar quanto FastCsvReader e também escreve. Estive muito feliz com FastCsvReader no passado, mas precisava de algo que também escrevesse e não estava feliz com FileHelpers.
Lendo:
Escrevendo:
Divulgação completa: eu sou o autor desta biblioteca.
fonte
WriteField
. Verifique os documentos aqui joshclose.github.io/CsvHelperCsvHelper
. Talvez pudesse oferecer algumas estratégias alternativas de leitura naquele local? A propósito, excluí meu comentário original, pois agora é irrelevante :-)Existem algumas opções, bem na própria estrutura.
Uma das mais fáceis é fazer referência a Microsoft.VisualBasic e, em seguida, usar TextFieldParser . É um leitor CSV totalmente funcional na estrutura principal.
Outra boa alternativa é usar conjuntos de dados para ler arquivos CSV .
fonte
Sebastien Lorion tem um ótimo
CSV
leitor no CodeProject chamado A Fast CSV Reader . Provavelmente um dos melhores para C # e é grátis.Quanto à escrita, apenas use
StreamWriter
.Aqui está um código padrão para escrever um
DataGridView
em um arquivo:fonte
Sim - embora eu presuma que você está realmente pedindo detalhes?
Experimente FileHelpers
fonte
Existem dezenas.
http://www.filehelpers.net/ é um dos mais comuns.
Devo dizer que acho o Filehelpers restritivo em alguns cenários e, em vez disso, uso o Fast CSV Reader . Na minha experiência, se você não souber o formato do seu arquivo CSV ou importar o mapeamento até o tempo de execução - esta é a melhor biblioteca para usar.
fonte