Importando Dados de Arquivos TXT para um DataGridView em C#

A exibição de dados estruturados em uma interface de usuário é uma tarefa comum em aplicações desktop. Frequentemente, esses dados podem vir de arquivos de texto simples (TXT), onde as informações são organizadas em linhas e colunas utilizando delimitadores específicos. Este artigo demonstra como carregar o conteúdo de um arquivo TXT em um controle DataGridView em C#, transformando o texto bruto em uma representação tabular.

Para ilustrar, consideraremos um arquivo TXT onde cada registro (linha) é separado por uma quebra de linha (\n) e os campos dentro de cada registro são separados por tabulações (\t).

  1. Leitura do Conteúdo do Arquivo TXT

O primeiro passo é ler todo o conteúdo do arquivo de texto. É crucial especificar a codificação correta para evitar problemas com caracteres especiais. Em muitos casos, Encoding.Default ou Encoding.UTF8 são escolhas apropriadas. A função File.ReadAllLines() é ideal, pois já retorna um array de strings, onde cada elemento é uma linha do arquivo, eliminando a necessidade de dividir manualmente pelo caractere de quebra de linha.


using System.IO;
using System.Text;
using System.Data; // Necessário para DataTable

// Define o caminho absoluto para o arquivo TXT
string caminhoDoArquivo = "C:\\Dados\\registros_medicos.txt";

// Lê todas as linhas do arquivo TXT diretamente para um array de strings
string[] linhasDoArquivo = File.ReadAllLines(caminhoDoArquivo, Encoding.Default);

  1. Estruturação dos Dados com DataTable

Para exibir os dados de forma organizada em um DataGridView, o uso de um DataTable é altamente recomendado. Ele atua como um contêiner de dados em memória, definindo as colunas e armazenando as linhas de dados. Primeiro, criamos o DataTable e definimos suas colunas, que corresponderão aos campos do nosso arquivo TXT.


DataTable tabelaDeRegistros = new DataTable("DadosMedicos");

// Definição das colunas da tabela
tabelaDeRegistros.Columns.Add("CodigoInstituicao", typeof(string));
tabelaDeRegistros.Columns.Add("NumeroPessoa", typeof(string));
tabelaDeRegistros.Columns.Add("NumeroAtendimento", typeof(string));
tabelaDeRegistros.Columns.Add("NumeroDocumento", typeof(string));
tabelaDeRegistros.Columns.Add("TipoTransacao", typeof(string));
tabelaDeRegistros.Columns.Add("SeqHospitalar", typeof(string));
tabelaDeRegistros.Columns.Add("SeqCentral", typeof(string));
tabelaDeRegistros.Columns.Add("ValorTotalMedico", typeof(string));
tabelaDeRegistros.Columns.Add("PagamentoConta", typeof(string));
tabelaDeRegistros.Columns.Add("PagamentoCobertura", typeof(string));

  1. Processamento das Linhas e Preenchimento do DataTable

Com as linhas do arquivo lidas e a estrutura do DataTable definida, o próximo passo é iterar sobre cada linha do arquivo, dividir seus campos e adicioná-los como novas linhas no DataTable.


// A quantidade esperada de campos por linha, correspondendo ao número de colunas criadas
const int NUMERO_CAMPOS_ESPERADO = 10; 

foreach (string linhaAtual in linhasDoArquivo)
{
    // Ignora linhas vazias ou que não contêm dados significativos
    if (string.IsNullOrWhiteSpace(linhaAtual))
    {
        continue;
    }

    // Divide a linha em campos usando o caractere de tabulação como delimitador
    string[] camposDaLinha = linhaAtual.Split(new char[] { '\t' }, StringSplitOptions.None);

    // Valida se a linha tem o número esperado de campos antes de processar
    if (camposDaLinha.Length == NUMERO_CAMPOS_ESPERADO)
    {
        DataRow novaEntrada = tabelaDeRegistros.NewRow();

        novaEntrada["CodigoInstituicao"] = camposDaLinha[0];
        novaEntrada["NumeroPessoa"] = camposDaLinha[1];
        novaEntrada["NumeroAtendimento"] = camposDaLinha[2];
        novaEntrada["NumeroDocumento"] = camposDaLinha[3];
        novaEntrada["TipoTransacao"] = camposDaLinha[4];
        novaEntrada["SeqHospitalar"] = camposDaLinha[5];
        novaEntrada["SeqCentral"] = camposDaLinha[6];
        novaEntrada["ValorTotalMedico"] = camposDaLinha[7];
        novaEntrada["PagamentoConta"] = camposDaLinha[8];
        novaEntrada["PagamentoCobertura"] = camposDaLinha[9];

        tabelaDeRegistros.Rows.Add(novaEntrada);
    }
    // Opcional: Adicionar lógica para lidar com linhas malformadas
    // else { Console.WriteLine($"Linha ignorada devido a formato incorreto: {linhaAtual}"); }
}

Note que incluímos uma verificação para garantir que cada linha processada contenha o número esperado de campos. Isso ajuda a evitar erros de índice e a lidar com linhas potencialmente incompletas ou malformadas no arquivo TXT, adicionendo robustez ao processo de leitura.

  1. Exibindo os Dados no DataGridView

Finalmente, para exibir os dados no controle DataGridView da sua aplicação Windows Forms, basta atribuir o DataTable preenchido à propriedade DataSource do DataGridView.


// Supondo que 'dataGridView1' é o nome do seu controle DataGridView
dataGridView1.DataSource = tabelaDeRegistros;

// Impede que o usuário adicione novas linhas diretamente no DataGridView
dataGridView1.AllowUserToAddRows = false;

// Opcional: Ajustar automaticamente o tamanho das colunas para caber no conteúdo
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

Tags: C# DataGridView DataTable TXT parsing

Publicado em 10-23 15:27