C# Programming

Leitura Eficiente de Arquivos CSV e Armazenamento em Array em C#

Spread the love

Arquivos CSV (Comma Separated Values) são um formato onipresente para armazenamento de dados tabulares. Este artigo apresenta dois métodos C# eficientes para ler arquivos CSV e armazenar seus conteúdos em arrays. Exploraremos uma abordagem manual usando a classe StreamReader e uma solução mais simplificada usando a classe TextFieldParser da biblioteca Microsoft.VisualBasic.FileIO.

Sumário

Lendo Arquivos CSV com StreamReader

A abordagem StreamReader oferece controle granular sobre o processo de leitura, permitindo customização para diversos formatos CSV. No entanto, exige mais manipulação manual de delimitadores e condições de erro.


using System;
using System.IO;

public class CsvReaderStreamReader
{
    public static string[][] ReadCsv(string filePath)
    {
        string[][] data = new string[0][]; // Inicializa como um array vazio
        try
        {
            using (StreamReader reader = new StreamReader(filePath))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    string[] values = line.Split(',');
                    Array.Resize(ref data, data.Length + 1);
                    data[data.Length - 1] = values;
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Erro ao ler o arquivo CSV: {ex.Message}");
        }
        return data;
    }

    public static void Main(string[] args)
    {
        string filePath = "data.csv"; 
        string[][] csvData = ReadCsv(filePath);

        if (csvData != null)
        {
            foreach (string[] row in csvData)
            {
                Console.WriteLine(string.Join(" ", row));
            }
        }
    }
}

Este código aprimorado redimensiona dinamicamente o array, evitando a limitação de tamanho inicial arbitrário. Ele também usa interpolação de string para mensagens de erro mais limpas e string.Join para saída concisa.

Lendo Arquivos CSV com TextFieldParser

O TextFieldParser simplifica a análise de CSV, especialmente para arquivos complexos com campos entre aspas ou delimitadores personalizados. Ele lida com essas complexidades automaticamente.


using Microsoft.VisualBasic.FileIO;
using System;

public class CsvReaderTextFieldParser
{
    public static string[][] ReadCsv(string filePath)
    {
        string[][] data = new string[0][];
        try
        {
            using (TextFieldParser parser = new TextFieldParser(filePath))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");

                while (!parser.EndOfData)
                {
                    string[] fields = parser.ReadFields();
                    Array.Resize(ref data, data.Length + 1);
                    data[data.Length - 1] = fields;
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Erro ao ler o arquivo CSV: {ex.Message}");
        }
        return data;
    }

    public static void Main(string[] args)
    {
        string filePath = "data.csv";
        string[][] csvData = ReadCsv(filePath);

        if (csvData != null)
        {
            foreach (string[] row in csvData)
            {
                Console.WriteLine(string.Join(" ", row));
            }
        }
    }
}

Este código lida eficientemente com a análise CSV usando TextFieldParser. Lembre-se de adicionar uma referência ao assembly Microsoft.VisualBasic em seu projeto.

Comparação de Métodos

Ambos os métodos alcançam o mesmo resultado, mas TextFieldParser é geralmente preferido por sua robustez e facilidade de uso, particularmente com arquivos CSV complexos. StreamReader oferece mais controle para cenários especializados, mas requer tratamento cuidadoso de erros e gerenciamento de delimitadores.

Deixe um comentário

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