Como abrir ficheiros de texto delimitados CSV em VB.NET
Com a facilidade do banco de dados, os ficheiros de texto são cada vez menos utilizados, mas em algumas coisas eles ainda estão ativos, como para criação de ficheiros de log, e ficheiros CSV (Comma-Separated Values). Para ler estes ficheiros, existem várias formas, umas mais complicadas, outras mais simples. Agora se o ficheiro for uma lista, o processo se torna ainda mais fácil, rápido e simples, utilizando uma ligação Microsoft Jet OLE DB 4.0.
Vamos ao exemplo:
Primeiro, o nosso arquivo se chamará dados.csv, e terá o conteúdo:
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
Como isto, podemos ler o ficheiro com o código abaixo:
Código HTML:
Sub Main() ' ConnectionString para ligação com Microsoft Jet OLEDB Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\;" & "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) ' Informação disponível no DataSet For Each oRow As DataRow In ds.Tables(0).Rows Console.WriteLine(oRow(0).ToString() & " " & oRow(1).ToString() & " " & oRow(2).ToString()) Next End Using End Sub
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”.
Com isto podemos filtrar os dados:
Código HTML:
Sub Main() ' ConnectionString para ligação com Microsoft Jet OLEDB Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\;" & "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 End Sub
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 executarmos o código acima ele não irá funcionar. Como solução podemos utilizar um ficheiro schema, como o nome de schema.ini, que seria colocar no mesmo diretório do ficheiro que estamos tentando ler. Este ficheiro forme 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 seria a seguinte:
[nome do ficheiro]
Format=Delimited(delimitador)
ColNameHeader=True ou False
Para o nosso exemplo, ficaria assim:
[dados.csv]
Format=Delimited(|)
ColNameHeader=False
Desta forma podemos ler o ficheiro, utilizando qualquer delimitador e definindo ainda algumas informações adicionais.
Fonte: VBTuga