VB.NET - Acessando um arquivo Texto


Como podemos acessar um arquivo texto usando ADO.NET em uma aplicação VB.NET ?

Muito simples , basta usar o provedor OLE DB .NET com a string de conexão correta para o caso.

A string de conexão é dada abaixo:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\caminho\;Extended Properties=""text;HDR=Yes;FMT=Delimited"""

"HDR=Yes;"  - indica que a primeira linha contém os nomes das colunas e não dados.

Vamos criar uma aplicação do tipo Windows Application usando VB.NET para acessar um arquivo texto.

Suponha que temos o arquivo texto - classificacao.txt - conforme abaixo:

"Classificacao","Time","Pontos"
1,"São Paulo",28
2,"Santos",24
3,"Mogi Mirim",22
4,"Santo André",20
5,"Corinthians",16

Este arquivos representa a classificação do campeonato Paulista/2005. Vamos acessar este arquivo e exibir os dados em um DataGrid.

Para isto vamos criar um aplicação VB.NET e no formulário padrão vamos incluir um DataGrid e um Botão de comando:

No evento Click do botão vamos inserir o código que faz o acesso e preenche um DataTable para em seguida exibir os dados no datagrid:

Private Sub btAcessoTxt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAcessoTxt.Click
        Dim da As New OleDbDataAdapter("SELECT * FROM [Classificacao.txt]", ConfigurationSettings.AppSettings("acessoTXT"))
        ' cria e preenche um datatable
        Dim dt As New DataTable("Categorias")
        Try
            da.Fill(dt)
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
        End Try

        ' vincula a tabela no modo de visualizacao padrao ao datagrid
        dg.DataSource = dt.DefaultView
    End Sub

A string de conexão esta armazenada no arquivo de configuração web.config. (Leia o artigo : Tratando arquivos de configuração para saber mais)

Então para o exemplo deste artigo o arquivo de configuração tem o seguinte conteúdo:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
    <add key="acessoTXT" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\classificacao.txt;Extended Properties=text;HDR=yes;FMT=Delimited" />
</appSettings>
</configuration>

O provedor OLE DB pode ler e inserir dados em um arquivo texto , para isto ele usa os drivers ISAM - Indexed Sequential Access Method - especificado no atributo : Extended Properties da string de conexão.

Não é possível definir todas as características de um arquivo texto através da string de conexão. Você pode acessar arquivos que usam delimitadores não padronizados criando um arquivo chamado schema.ini no mesmo diretório do arquivo texto. Abaixo um exemplo de um possível arquivo schema.ini para o arquivo classificacao.txt usado no exemplo:

[Classificacao.txt]
Format=CSVDelimited
ColNameHeader=True
MaxScanRows=0
Character=OEM
Col1=Classificacao Long Width 4
Col2=Time Text Width 15
Col3=Pontos Long Width 4

As opções de formatação usadas são :

Formato Descrição
CSV Delimited Os campos são delimitados por virgulas.  Format=CSVDelimited .  È o valor padrão
Custom Delimited Campos são delimitados com um caracter personalizado. Format=Delimited(customCharacter)
Fixed Lenght Os campos possuem tamanho fixo. Format=FixedLength
Tab Delimited OS campos  são delimitados com tabs;  Format=TabDelimited

MaxScanRows : indica quantos linhas serão procuradas para automaticamente determinar o tipo da coluna. O valor 0 indica que todas as linhas serão procuradas.

ColN = ColumnName dataYpe [Width n]

ColN - indica o nome da coluna , largura e tipo de dados para cada coluna. Se o nome da coluna tiver espaços deverá vir entre colchetes.

Até breve..


José Carlos Macoratti