Trabalhando com CSV em C# (.NET): bibliotecas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com CSV em C# (.NET): visão geral das ferramentas e exemplos

CSV (Comma-Separated Values) é um dos formatos mais comuns para troca de dados tabulares. No ecossistema C# (.NET), existem várias maneiras confiáveis de trabalhar com este formato: desde ferramentas integradas até poderosas bibliotecas de terceiros. Neste artigo, abordaremos as principais abordagens e melhores práticas.



Por que não escrever um parser CSV manualmente?

O formato CSV parece simples à primeira vista, mas na prática contém muitas nuances: escape de aspas, vírgulas dentro dos campos, diferentes delimitadores, caracteres de nova linha em valores. Usar bibliotecas prontas elimina dores de cabeça e o tratamento de casos extremos.



Biblioteca CsvHelper — o padrão ouro

CsvHelper é a biblioteca mais popular para trabalhar com CSV em .NET. Ela suporta mapeamento para classes POCO, leitura em streaming, configuração de delimitadores e codificações.

Instalação via NuGet:

Install-Package CsvHelper


Exemplo de leitura de CSV para uma lista de objetos

using CsvHelper;using System.Globalization;

public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; }}

var users = new List<User>();using (var reader = new StreamReader("users.csv"))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){ users = csv.GetRecords<User>().ToList();}


Exemplo de escrita de CSV a partir de uma coleção

using (var writer = new StreamWriter("output.csv"))using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)){    csv.WriteRecords(users);}


Parser integrado: TextFieldParser (Microsoft.VisualBasic)

Se você não quiser adicionar dependências externas, o .NET possui o TextFieldParser integrado do namespace Microsoft.VisualBasic.FileIO. Ele está disponível no .NET Framework e .NET Core/.NET 5+ (requer instalação do pacote Microsoft.VisualBasic).



Exemplo de uso do TextFieldParser

using Microsoft.VisualBasic.FileIO;

using (var parser = new TextFieldParser("data.csv")){ parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true;

while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Console.WriteLine(string.Join(" | ", fields)); }}

Prós: não requer bibliotecas de terceiros. Contras: menos flexível que o CsvHelper, sem mapeamento automático para classes.



Trabalhando com arquivos grandes: processamento em streaming

Ao trabalhar com arquivos CSV com mais de 100 MB, é importante evitar carregar todo o arquivo na memória. Ambas as bibliotecas suportam processamento em streaming:

  • CsvHelper — use GetRecords<T>() em um loop foreach sem chamar .ToList().
  • TextFieldParser — lê linha por linha, o que também é eficiente.


Exemplo de leitura em streaming com CsvHelper

using (var reader = new StreamReader("large.csv"))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){    foreach (var record in csv.GetRecords<User>())    {        ProcessUser(record); // processa um por um    }}


Tratamento de erros e validação de dados

Ao importar CSV, os dados podem estar incorretos. O CsvHelper permite configurar o tratamento de erros através de eventos:

csv.Configuration.BadDataFound = context =>{    Console.WriteLine($"Erro na linha {context.RawRow}: {context.RawRecord}");};

Também é possível usar atributos para validação de campos:

public class Product{    [Name("ProductId")]    public int Id { get; set; }        [Required]    public string Nam                    

Recommendations