VB .NET - Convertendo CSV para DataTable
Neste artigo vamos converter arquivos no formato CSV para DataTable usando a linguagem VB .NET.
Um arquivo CSV é um arquivo texto delimitado que utiliza a vírgula para separar os valores existentes no arquivo, sendo que existem implementações onde outros separadores também podem ser usados.
Os arquivos CSV mais simples não permitem valores que contém vírgula (Ex: Rua Teste, 100) ou outros caracteres especiais como o indicador de nova linha CR ou LF. (Carriage Return/ Line Feed) . Implementações mais sofisticadas permitem vírgulas, ponto e vírgula(;), asterístico(*) como delimitadores e outros caracteres especiais.
Vamos criar uma classe chamada Conversor contendo os seguintes métodos:
Recursos Usados
Objetivo
Criando o projeto
Abra o VS Express 2012 for Windows Desktop e no menu FILE clique em New Project;
Selecione o template Visual Basic -> Windows -> Windows Forms Application informando o nome CSV_DataTable;
No formulário padrão form1.vb inclua os seguintes controles:
Disponha os controles conforme o leiaute da figura abaixo:
No menu PROJECT clique em Add Class e informe o nome Conversor.vb e a seguir digite o código abaixo nesta classe:
Imports System.IO
Imports System.Text
Public Class Conversor
Private NomeArquivo As String
Public Sub New(ByVal NomeArquivo As String)
Me.NomeArquivo = NomeArquivo
End Sub
Public Function getColunas(ByVal nomeColunas As Boolean) As String()
Try
Dim leitorArquivo As New StreamReader(NomeArquivo)
Dim linha As String = leitorArquivo.ReadLine
leitorArquivo.Close()
Dim Colunas() As String = linha.Split(",")
If nomeColunas Then
Return Colunas
End If
Dim i As Integer = 1
Dim c As Integer = 0
Dim nome_Colunas(Colunas.Count - 1) As String
For Each column As String In Colunas
nome_Colunas(c) = "coluna" & i
i += 1
c += 1
Next
Return nome_Colunas
Catch ex As Exception
Throw ex
End Try
Return Nothing
End Function
Public Function ConverteCSVParaDataTable(ByVal nomeColunas As Boolean) As DataTable
Try
Dim dt As New DataTable
For Each nome_Coluna In getColunas(nomeColunas)
dt.Columns.Add(nome_Coluna)
Next
Dim leitorArquivo As New StreamReader(NomeArquivo)
If nomeColunas Then
leitorArquivo.ReadLine()
End If
Dim linha As String = leitorArquivo.ReadLine
While Not IsNothing(linha)
linha = linha.Replace(Chr(34), "")
dt.Rows.Add(linha.Split(","))
linha = leitorArquivo.ReadLine
End While
leitorArquivo.Close()
Return dt
Catch ex As Exception
Throw ex
End Try
Return Nothing
End Function
Public Function ConverteTabelaParaCSV(ByVal _tabela As DataTable, ByVal _nomeArquivo As String,
ByVal sepChar As String) As Boolean
Dim writer As StreamWriter = Nothing
Try
writer = New StreamWriter(_nomeArquivo)
' primeiro escreva a linha com o nome das colunas
Dim separador As String = ""
Dim builder As New StringBuilder
For Each col As DataColumn In _tabela.Columns
builder.Append(separador).Append(col.ColumnName)
separador = sepChar
Next
writer.WriteLine(builder.ToString())
' escrever todas as linhas
For Each row As DataRow In _tabela.Rows
separador = ""
builder = New StringBuilder
For Each col As DataColumn In _tabela.Columns
builder.Append(separador).Append(row(col.ColumnName))
separador = sepChar
Next
writer.WriteLine(builder.ToString())
Next
Return True
Catch
Return False
Finally
If Not writer Is Nothing Then writer.Close()
End Try
End Function
End Class
|
Esta classe é responsável por obter o nome das colunas e gerar um datatable a partir do arquivo CSV.
No evento Click do botão de comando btnArquivo temos o código a seguir que obtém o caminho e nome do arquivo CSV:
Private Sub btnArquivo_Click(sender As Object, e As EventArgs) Handles btnArquivo.Click
Dim AbrirComo As OpenFileDialog = New OpenFileDialog()
Dim caminho As DialogResult
AbrirComo.Title = "Abrir como"
AbrirComo.InitialDirectory = "C:\Dados"
AbrirComo.FileName = "Nome Arquivo"
AbrirComo.Filter = "Arquivos Textos (*.*)|*.*"
caminho = AbrirComo.ShowDialog
nomeArquivo = AbrirComo.FileName
If nomeArquivo = Nothing Then
MessageBox.Show("Arquivo Inválido", "Arquivo", MessageBoxButtons.OK)
Else
txtArquivo.Text = AbrirComo.FileName
End If
End Sub
|
No evento Click do botão de comando - Ler Arquivo CSV - temos o código a seguir que lê o arquivo CSV e o exibe no controle ListBox (lstDados):
Private Sub
LerArquivoCSV() Dim caminhoArquivo As String = txtArquivo.Text.Trim If IO.File.Exists(txtArquivo.Text) Then Dim consulta As String() = File.ReadAllLines(caminhoArquivo) For Each item In consulta lstDados.Items.Add(item) Next btnConverterCSV.Enabled = True Else MessageBox.Show("O arquivo <<" & txtArquivo.Text & ">> não foi localizado !") End If End Sub |
No botão - Converter para DataTable - temos o seguinte código no evento Click que cria uma instância da classe Conversor e chama o método ConverterCSVPara DataTable() retornando um objeto datatable que é exibido no controle DataGridView:
Private Sub btnConverterCSV_Click(sender As Object, e As EventArgs) Handles btnConverterCSV.Click
Try
Dim conv As New Conversor(nomeArquivo)
dgvDados.DataSource = conv.ConverteCSVParaDataTable(True)
btnTableCSV.Visible = True
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
A seguir temos o código que faz o processo inverso, i.e, converte um DataTable para um arquivo CSV na pasta c:\dados:
Private Sub btnTableCSV_Click(sender As Object, e As EventArgs) Handles btnTableCSV.Click
Try
Dim conv As New Conversor(nomeArquivo)
conv.ConverteTabelaParaCSV(conv.ConverteCSVParaDataTable(True), "c:\dados\Macoratti_" & Now.Minute & ".txt", ",")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
A seguir vemos o projeto em execução onde a partir do arquivo CSV geramos um datatable:
Pegue o projeto completo aqui: CSV_DataTable.zip
João 1:1 No princípio era o Verbo, e o Verbo estava com Deus, e o Verbo era Deus.
João 1:2 Ele estava no princípio com Deus.
João 1:3 Todas as coisas foram feitas por intermédio dele, e sem ele nada do que foi feito se fez.
João 1:4 Nele estava a vida, e a vida era a luz dos homens;
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#. |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#