VB .NET- Lendo arquivos delimitados para um DataTable


Já publiquei diversos artigos tratando deste assunto mas ele nunca se esgota. Hoje vou mostrar uma maneira de ler arquivos delimitados para um DataTable.

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 VB .NET

Abra o Visual Basic 2010 Express Edition e no menu File clique em New Project selecionando o template Windows Forms Application e informando o nome Ler_CSV_DataTable;

No formulário form1.vb vamos incluir os seguintes componentes:

  1. ListBox = lstDados
  2. DataGridView - gdvDadaos
  3. Button - btnLerTxt
  4. Button - btnSair

Conforme o leiaute abaixo:

Vamos declarar os seguintes namespaces no formulário para que possamos os recursos necessários ao nosso projeto:

Imports System.Data
Imports System.Data.OleDb
Imports System.IO

No evento Click do botão - Ler arquivo TXT para DataTable - vamos definir a chamada para a rotina LerTxtParaDataTable() :

 Private Sub btnLerTxt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLerTxt.Click
        LerTxtParaDataTable()
    End Sub

A rotina LerTxtParaDataTable() tem o seguinte código:

  Private Sub LerTxtParaDataTable()

        Dim nomeArquivo As String = "c:\dados\clientes.txt"
        'obtem do caminho onde esta o exe gerado. No exemplo na pasta bin\Debug
        Dim nomeDiretorio As String = Path.GetDirectoryName(Application.ExecutablePath)
        Dim dt As DataTable

        Using cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;" & _
                                                             "Data Source=" & nomeDiretorio & ";" & _
                                                             "Extended Properties=""Text;HDR=Yes;FMT=Delimited""")
            ' Abre a conexao
            cn.Open()

            ' define o adapter
            Using adapter As New OleDbDataAdapter("SELECT * FROM " & nomeArquivo, cn)
                dt = New DataTable("Clientes")
                adapter.Fill(dt)
            End Using
        End Using
        ExibirTexto()
        dgvDados.DataSource = dt
    End Sub

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.

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 Sub ExibirTexto()
        Dim caminhoArquivo As String = "C:\dados\Clientes.txt"
        Dim consulta As String() = File.ReadAllLines(caminhoArquivo)
        For Each item In consulta
            lstDados.Items.Add(item)
        Next
    End Sub

Executando o projeto iremos obter :

O código para versão C# ficaria assim:

string nomeArquvo = "c:\dados\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\""))
{
    // Abre a conexao
    cn.Open();

    // define o adapter
    using (OleDbDataAdapter adapter =
        new OleDbDataAdapter("SELECT * FROM " + nomeArquivo, cn))
    {
        dt = new DataTable("Clientes");
        adapter.Fill(dt);
    }
}

Pegue o projeto completo aqui: Ler_CSV_DataTable.zip


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET  no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

Rom 13:9 Com efeito: Não adulterarás; não matarás; não furtarás; não cobiçarás; e se há algum outro mandamento, tudo nesta palavra se resume: Amarás ao teu próximo como a ti mesmo.
Rom 13:10
O amor não faz mal ao próximo. De modo que o amor é o cumprimento da lei.

Referências:


José Carlos Macoratti