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).
- 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);
- 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));
- 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.
- 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);