VB  .NET - Lendo um arquivo CSV para um array


 

 Neste artigo vou mostrar como ler o conteúdo de um arquivo CSV para um array usando a linguagem VB .NET.


Para começar vamos rever o que vem a ser esse tal de CSV ...

 

Comma-separated values (ou CSV) é um formato de arquivo que armazena dados tabelados, cujo grande uso data da época dos mainframes. Por serem bastante simples, arquivos .csv são comuns em todas as plataformas de computador.

O CSV é um implementação particular de arquivo texto separados por um delimitador, que usa a vírgula e a quebra de linha para separar os valores. O formato também usa as aspas em campos no qual são usados os caracteres reservados (vírgula e quebra de linha). Essa robustez no formato torna o CSV mais amplo que outros formatos digitais do mesmo segmento.(http://pt.wikipedia.org/wiki/Comma-separated_values)

Exemplo de um arquivo CSV:

Arquivo Agenda de contatos
1979, Macoratti, São Paulo, SP. 125500
1980, Jose Carlos, Rio De Janeiro, RJ, 210125
1992, Ana Maria, Marilia, SP , 134525
2000, Janice , Parana, PR, 789452
 

Pois bem , nosso trabalho será ler o conteúdo de um arquivo CSV para um array e exibir o resultado em um DataGridView.

 

Recursos Usados :

Criando o projeto Windows Forms

Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem Visual Basic e o template Windows Classic Desktop ->Windows Forms Application(.NET Framework)

Informe um nome a seu gosto. Eu vou usar o nome vbn_csvArray

A seguir inclua os seguintes controles no formulário form1.vb a partir da ToolBox:

  1. TextBox - txtArquivo

  2. 1 DataGridView - gdvDados

  3. 1 Button - btnAbrir

Disponha os controles conforme mostra a imagem da figura abaixo:

Implementando o código no formulário

Vamos agora definir o código no formulário Form1.vb começando com a declaração dos namespaces:

Imports System.IO

No evento Load do formulário digite o código a seguir:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        txtArquivo.Text = Path.GetFullPath(Path.Combine(Application.StartupPath, "..\..")) + "\Dados.csv"
        txtArquivo.Select(0, 0)
 End Sub

Este código vai montar o caminho com nome do arquivo Dados.csv que esta na raiz do projeto e exibí-lo na caixa de texto.

No evento Click do Botão Abrir defina o código a seguir:

Private Sub btnAbrir_Click(sender As Object, e As EventArgs) Handles btnAbrir.Click
        ' Obtem os dados do arquivo CSV
        Dim values As String(,) = CarregarCsv(txtArquivo.Text)
        Dim numero_linhas As Integer = values.GetUpperBound(0) + 1
        Dim numero_colunas As Integer = values.GetUpperBound(1) + 1
        ' Exibe os dados 
        ' Cria o cabeçalho
        ' Para o exemplo assumimos que a primeira linha
        ' contém os nomes dad colunas
        gdvDados.Columns.Clear()
        For coluna As Integer = 0 To numero_colunas - 1
            gdvDados.Columns.Add(values(0, coluna), values(0, coluna))
        Next
        ' Adiciona os dados no datagridview
        For linha As Integer = 1 To numero_linhas - 1
            gdvDados.Rows.Add()
            For coluna As Integer = 0 To numero_colunas - 1
                gdvDados.Rows(linha - 1).Cells(coluna).Value = values(linha, coluna)
            Next
        Next
        'Torna todas as colunhas autosize.
        For Each coluna As DataGridViewColumn In gdvDados.Columns
            coluna.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        Next
    End Sub

Neste código lemos o arquivo CSV chamando o método CarregarCSV() e exibimos o conteúdo no DataGridView.

Agora crie o método CarregarCSV usando o seguinte código :

Private Function CarregarCsv(nomeArquivo As String) As String(,)
        ' Obtem o texto do arquivo
        Dim arquivoCSV As String = File.ReadAllText(nomeArquivo)
        ' Obtém cada linha do arquivo
        arquivoCSV = arquivoCSV.Replace(ControlChars.Lf, ControlChars.Cr)
        Dim linhas As String() = arquivoCSV.Split(New Char() {ControlChars.Cr}, StringSplitOptions.RemoveEmptyEntries)
        ' Ve quantas linhas e colunas existem
        Dim numeroLinhas As Integer = linhas.Length
        Dim numeroColunas As Integer = linhas(0).Split(","c).Length
        ' Aloca dados no array
        Dim valores As String(,) = New String(numeroLinhas - 1, numeroColunas - 1) {}
        ' Carrega o array
        For vetor As Integer = 0 To numeroLinhas - 1
            Dim linha_vetor As String() = linhas(vetor).Split(","c)
            For c As Integer = 0 To numeroColunas - 1
                valores(vetor, c) = linha_vetor(c)
            Next
        Next
        ' Retorna os valores
        Return valores
    End Function

Executando o projeto iremos obter o resultado abaixo:

Pegue o código do projeto aqui :   vbn_csvArray.zip

Está alguém entre vós aflito? Ore. Está alguém contente? Cante louvores. Tiago 5:13

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

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti