C# Programming

Escrita Eficiente de Arquivos CSV em C#

Spread the love

Arquivos CSV (Comma Separated Values) são um formato onipresente para armazenamento de dados tabulares. Sua simplicidade os torna facilmente acessíveis, mas seu tratamento programático requer consideração cuidadosa. Este artigo explora duas abordagens distintas em C# para gravação de dados em arquivos CSV: utilizando a robusta biblioteca CsvHelper e empregando o método embutido File.WriteAllText(). Cada abordagem oferece vantagens únicas, tornando a escolha ideal dependente da complexidade dos dados e dos requisitos do projeto.

Sumário

Gravando em CSV usando CsvHelper

A biblioteca CsvHelper oferece uma solução poderosa e flexível para lidar com arquivos CSV em C#. Seu gerenciamento eficiente de aspas, escape e vários delimitadores a torna ideal para conjuntos de dados complexos. Comece instalando o pacote NuGet CsvHelper via seu gerenciador de pacotes preferido (por exemplo, NuGet Package Manager no Visual Studio).


using CsvHelper;
using CsvHelper.Configuration;
using System;
using System.Globalization;
using System.IO;
using System.Collections.Generic;

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

public class CsvHelperExample
{
    public static void Main(string[] args)
    {
        List<Person> people = new List<Person>()
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Jane", LastName = "Doe", Age = 25 },
            new Person { FirstName = "Peter", LastName = "Jones", Age = 40 }
        };

        string filePath = "output.csv";

        using (var writer = new StreamWriter(filePath))
        using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
        {
            csv.WriteRecords(people);
        }

        Console.WriteLine($"Dados gravados em {filePath}");
    }
}

Este exemplo mostra a simplicidade de gravar uma lista de objetos Person em um arquivo CSV. CultureInfo.InvariantCulture garante formatação consistente independentemente das configurações do sistema. As instruções using garantem a liberação adequada de recursos.

Gravando em CSV usando WriteAllText()

Para conjuntos de dados menores e menos intrincados, o método File.WriteAllText() fornece uma abordagem direta. No entanto, este método exige o manuseio manual de vírgulas e aspas, o que pode se tornar trabalhoso com dados contendo esses caracteres dentro dos campos.


using System;
using System.IO;
using System.Text;

public class WriteAllTextExample
{
    public static void Main(string[] args)
    {
        string[,] data = {
            {"FirstName", "LastName", "Age"},
            {"John", "Doe", "30"},
            {"Jane", "Doe", "25"},
            {"Peter", "Jones", "40"}
        };

        StringBuilder csvBuilder = new StringBuilder();
        for (int i = 0; i < data.GetLength(0); i++)
        {
            for (int j = 0; j < data.GetLength(1); j++)
            {
                csvBuilder.Append(data[i, j]);
                if (j < data.GetLength(1) - 1)
                {
                    csvBuilder.Append(",");
                }
            }
            csvBuilder.AppendLine();
        }

        string filePath = "output_simple.csv";
        File.WriteAllText(filePath, csvBuilder.ToString());

        Console.WriteLine($"Dados gravados em {filePath}");
    }
}

Este código constrói a string CSV manualmente e a grava no arquivo. Embora funcional para casos simples, ele carece da robustez do CsvHelper para dados complexos, exigindo um tratamento extensivo de caracteres especiais para evitar corrupção de dados.

Escolhendo o Método Certo

A seleção entre esses métodos depende inteiramente das necessidades específicas do projeto. Para conjuntos de dados grandes ou complexos com potencial para caracteres especiais dentro dos campos, o CsvHelper é altamente recomendado devido ao seu tratamento robusto de erros e gerenciamento eficiente de dados. Para conjuntos de dados muito simples, o File.WriteAllText() pode ser suficiente, mas suas limitações devem ser cuidadosamente consideradas. Lembre-se de sempre incorporar tratamento de erros apropriado (por exemplo, blocos try-catch) para gerenciar possíveis exceções como IOException em ambientes de produção.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *