C# - Lendo arquivos delimitados para um DataTable
Hoje vamos recordar como ler arquivos delimitados para um DataTable na linguagem C#. |
Já publiquei diversos artigos tratando deste assunto mas ele nunca se esgota. Hoje vou mostrar uma maneira de ler arquivos delimitados para um DataTable usando a linguagem C#.
Para acompanhar melhor o artigo é recomendável que você leia as referências sobre o tratamento e leitura de arquivos textos e delimitados visto que não vou entrar em detalhes sobre esse assunto.
Mesmo que você não vá utilizar um banco de dados a opção de ler um arquivo texto delimitado para um DataTable ainda te traz vantagens pois evita que você tenha que criar código para o tratamento de strings e facilita o acesso os dados importados pela sua aplicação.
Como exemplo você pode simplesmente vincular o DataTable a um controle de grade como DataGridView ou GridView para exibir os resultados, ou você pode usar os recursos do LINQ para DataTables sobre o resultado para realizar a manipulação dos dados.
Como exemplo eu vou usar um arquivo texto chamado Clientes.txt que esta na pasta c:\dados com o seguinte conteúdo:
Codigo, Nome,
Cidade, DataMatricula
1,Macoratti,Santos,20120411
2,Jefferson,Americana,20120417
3,Miriam,Campinas,20120410
4,Janice,Catanduva,20120405
O arquivo Clientes.txt é um arquivo CSV - Comma separated value onde na primeira linha temos os nomes das colunas.
Nosso objetivo será acessar o arquivo , ler o seu conteúdo e incluir o conteúdo em um DataTable.
Criando o projeto no VS 2017
Abra o Visual Basic 2017 Community e no menu File clique em New Project selecionando o template Windows Classic Desktop e Windows Forms App e informando o nome CShp_txt_db;
No formulário form1.cs vamos incluir os seguintes componentes:
Nota: Inclua o ListBox no Panel1 e o DataGridView no Panel2
Conforme o leiaute abaixo:
Vamos declarar os seguintes namespaces no formulário para que possamos os recursos necessários ao nosso projeto:
using System;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Windows.Forms;
No evento Click do botão - Ler arquivo TXT para DataTable - vamos definir a chamada para a rotina LerTxtParaDataTable() :
private void btnLerTxt_Click(object sender, EventArgs e) { LerTxtParaDataTable(); } |
A rotina LerTxtParaDataTable() tem o seguinte código:
private void LerTxtParaDataTable() { string nomeArquivo = @"c:\dados\txt\clientes.txt"; string nomeDiretorio = Path.GetDirectoryName(Application.ExecutablePath); DataTable dt; using (OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;" + "Data Source=" + nomeDiretorio + ";" + "Extended Properties=\"Text;HDR=Yes;FMT=Delimited\"")) { cn.Open(); using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + nomeArquivo, cn)) { dt = new DataTable("Clientes"); adapter.Fill(dt); } } ExibirTexto(); dgvDados.DataSource = dt; } |
Este código começa por declarar variáveis para armazenar o arquivo de texto, o nome do diretório e o arquivo contendo o DataTable.
Esta técnica só funciona com um conjunto padrão de extensões de nome de arquivo. O arquivo pode estar em qualquer diretório.
Neste exemplo, o arquivo esta na pasta c:\dados\txt.
A instrução a seguir configura a conexão com o diretório ele define a propriedade Provider para usar o provedor Microsoft.Jet.OLEDB.
A propriedade da fonte de dados - Data Source - define o diretório que contém o arquivo de texto.
As propriedades estendidas que definem que o arquivo será do tipo texto ("Text"), e que tem um cabeçalho (HDR = Yes), e que esta em um formato de arquivo delimitado (FRM delimitado =).
As propriedades estendidas devem estar dentro de aspas, assim entre aspas (VB) ou barras (C#).
Em seguida, o código abre a conexão, e assim o arquivo. Uma vez que este código está em uma instrução using, o arquivo é fechado automaticamente no final do bloco usando.
A segunda instrução usa um DataAdapter, definindo uma instrução Select e a conexão aberta.
A instrução Select seleciona todas as informações de um arquivo específico, tal como definido pela variável nomeArquivo.
Em seguida, o código cria o DataTable, com o nome Clientes.
Finalmente, usamos o método Fill do TableAdapter para ler os dados do arquivo de texto para o DataTable.
Para exibir o arquivo texto no controle ListBox usamos a rotina ExibirTexto() conforme código abaixo:
private void ExibirTexto() { string caminhoArquivo = @"C:\dados\txt\Clientes.txt"; string[] consulta = File.ReadAllLines(caminhoArquivo); foreach (var item in consulta) lstDados.Items.Add(item); } |
Executando o projeto iremos obter :
Pegue o projeto completo aqui: CShp_txt_db.zip
"Porque o reino de Deus não consiste em
palavras, mas em poder."
1 Coríntios 4:20
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
"Porque o reino de Deus não consiste
em palavras, mas em poder."
1 Coríntios
4:20
Referências: