Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Como abrir ficheiros de texto delimitados

Os ficheiros de texto são cada vez menos usados, mas ainda há alguns casos que se utilizam, como por exemplo, para a criação de ficheiros log, ficheiro CSV (Comma-separated values), etc.

Para ler ficheiros de texto existem vários métodos, alguns dos quais referidos num artigo anterior, mas quando são listas a forma mais fácil, rápida e prática de o fazer é utilizando uma ligação Microsoft Jet OLE DB 4.0.

Imaginemos o seguinte ficheiro (dados.csv):

1;Amarelo;22:09 11-06-2010
2;Azul;22:10 12-06-2010
3;Verde;22:11 12-06-2010
4;Verde;22:12 13-06-2010
5;Preto;22:13 14-06-2010
6;Branco;22:14 14-06-2010

Para ler este ficheiro é apenas necessário:

' ConnectionString para ligação Microsoft Jet OLEDB
Dim connString As String =
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;" &
    "Extended Properties='text;HDR=no;FMT=Delimited'"

Dim SQL As String = "SELECT * FROM dados.csv"
Using da As New OleDb.OleDbDataAdapter(SQL, connString)
    Dim ds As New DataSet
    da.Fill(ds)

    Stop ' Informação disponível no DataSet

End Using

Desta forma colocamos toda a informação num DataSet. Neste exemplo, a DataTable terá 6 linhas (rows) e três colunas (columns), onde as colunas terão o nome, gerado automaticamente, de “F1”, “F2” e “F3”.

Depois é fácil filtrar os dados! Por exemplo, para mostrar todos os registos que tenham na segunda coluna o valor “Verde”:

' ConnectionString para ligação Microsoft Jet OLEDB
Dim connString As String =
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;" &
    "Extended Properties='text;HDR=no;FMT=Delimited'"

Dim SQL As String = "SELECT * FROM dados.csv"
Using da As New OleDb.OleDbDataAdapter(SQL, connString)
    Dim ds As New DataSet
    da.Fill(ds)

    Dim view As DataView = ds.Tables(0).DefaultView
    view.RowFilter = "F2 = 'Verde'"

    ' Mostra o número das linhas que têm o
    ' valor “Verde’ na segunda coluna      
    For x As Integer = 0 To view.Count - 1
        Console.WriteLine(view(x).Row.Item(0).ToString)
    Next
    Console.Read()

End Using

Neste exemplo foi utilizado um DataView, mas podia ser feito directamente na instrução SQL:

"SELECT * FROM dados.csv WHERE F2 = 'Verde'"

Mas imaginemos que o ficheiro tem um delimitador diferente, ou seja, não é utilizado o ponto e virgula (;) mas sim outro. Isto poderá acontecer por diversos motivos, com por exemplo, quando o ficheiro é gerado por uma máquina ou quando é gerado por uma aplicação que não temos controlo.

Imaginemos agora que o delimitador e uma barra (|).

1|Amarelo|22:09 11-06-2010
2|Azul|22:10 12-06-2010
3|Verde|22:11 12-06-2010
4|Verde|22:12 13-06-2010
5|Preto|22:13 14-06-2010
6|Branco|22:14 14-06-2010

Se executássemos o código anterior, iria ler o ficheiro como uma coluna apenas. 

Uma solução para resolver este problema seria a de utilizar um ficheiro de schema, com o nome schema.ini, que seria colocado na mesma directoria do ficheiro a ler. Este ficheiro fornece o IISAM com informações sobre o formato dos dados, o nome da coluna e informações sobre o tipo de dados, e várias outras características, permitindo também definir qual o delimitador.

A estrutura(simplificada) é a seguinte:

[nome do ficheiro]
Format=Delimited(delimitador)
ColNameHeader=True ou False

Para o exemplo apresentado, o ficheiro schema.ini ficaria da seguinte forma:

[dados.csv]
Format=Delimited(|)
ColNameHeader=False

Desta forma podemos ler o ficheiro indicando qual o delimitador correcto e definindo ainda algumas informações adicionais.


NOTICIA: Revista PROGRAMAR - Edição 24 - Junho de 2010

Já está disponível a revista PROGRAMAR, um dos projectos da comunidade Portugal-a-Programar, edição nº 24 de Junho de 2010.

Nesta edição pode-se ler os seguintes artigos:

  • Bases de dados para objectos
  • Padrões de desenho para projectos corporativos
  • Introdução ao WCF 4 (Windows Communication Foundation)
  • Continuação do tutorial sobre LUA
  • Entrevista a Celso Pinto, o autor do modelo3.pt

Mais Informações


MSDN Magazine - Junho de 2010

Já está disponível a versão de Junho da MSDN Magazine. Desta vez, podemos ver alguns artigos (entre outros), como:

Na coluna Basic Instincts um artigo sobre Multi-Targeting Visual Basic Applications in Visual Studio 2010, abordando:

  • Multi-Targeting in Visual Studio
  • Design-Time Compatibility
  • Multi-Targeting in the Visual Studio 2010 IDE
  • Multi-Targeting Using the Command-Line Compiler
  • Client-Profile and Mixed-Target Solutions
  • PIAs and Interop

Para quem ainda não conhece, está também disponíveis o exemplos de código de todas as revistas (desde 2002/2003), e a própria revista em formato PDF.


MSDEV - Vídeos, Virtual Labs e Web Seminars

 

A msdev.com continua a oferecer gratuitamente diversos Vídeos, Virtual Labs e Web Seminars sobre diversas tecnologias Microsoft.

Estes vídeos têm diferentes durações , entre 15 a 90 minutos, e mostram o que há de novo e como o fazer. Estes são alguns dos títulos que já estão disponíveis ou que estarão disponíveis para breve:

Visual Studio 2010 RTM

Programming Microsoft Office 2010

What's New in Silverlight 4?

Dev 10 Training Series

What’s New in Windows Presentation Foundation 4


Existem muito mais em diversas áreas Microsoft … é só pesquisar!




Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico