Lendo Arquivo CSV no VB .NET

Nesse post vou mostrar como ler e tratar um arquivo CSV (Comma-separated values). No post Lendo um Arquivo TXT no VB .NET, mostrei a leitura de um arquivo txt, e também duas formas de como fazer isso. Para ler um arquivo CSV, o processe será o mesmo, já que este arquivo somente difere do arquivo txt, pela sua formatação.

O arquivo CSV

Esse formato de arquivo, é caracterizado por utilizar um caractere para delimitar os campos. Os campos são sequencias de textos. Para entendermos melhor, veja o exemplo de um arquivo CSV.

Arquivo CSV de Exemplo

A função SPLIT

O grande segredo para a leitura do arquivo CSV, está na separação dos campos, para tanto, utilizaremos a função SPLIT.

A função Split [Split(expression<,delimiter><,count><,compare>]  recebe uma STRING contendo os valores (campos) e os delimitadores e uma outra String com um único caractere que indica o delimitador, ou seja, um caractere que indica o fim de um campo, no nosso caso, o “,” (virgula) e, gera como retorno um array (vetor), onde as posições são os campos que foram separados. Somente o parâmetro expression é obrigatório, mas para efeito do nosso post, utilizarei também o segundo parâmetro delimiter. Para mais informações sobre a função, leia a definição completa no MSDN.

Por exemplo:

Utilizando a primeira linha do arquivo CSV mostrado acima, a função Split executada:

Array = Split(PrimeirLinha, ",")
'Retornaria:
'Array(0) = 1997
'Array(1) = Ford
'Array(2) = E350
'Array(3) = 3000.00

Preenchendo DataGridView com arquivo CSV

O projeto do tipo WidowsApplication, contará apenas com um botão, que iniciará o processo de leitura, e um DataGridView, que receberá os dados do arquivo.

Temos o seguinte código para ler o arquivo CSV:

Imports System.IO
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim arqCSV As New StreamReader("D:POSTLendo arquivo CSVexemplo.csv")
        Dim LinhaArquivo As String
        Dim ArrayCampos() As String
        DataGridView1.Columns.Add("Ano", "Ano")
        DataGridView1.Columns.Add("Marca", "Marca")
        DataGridView1.Columns.Add("Modelo", "Modelo")
        DataGridView1.Columns.Add("Valor", "Valor")

        While Not arqCSV.EndOfStream
            LinhaArquivo = arqCSV.ReadLine
            ArrayCampos = Split(LinhaArquivo, ",")
            DataGridView1.Rows.Add(ArrayCampos)
        End While
    End Sub
End Class

Pontos que ressalto no código:

  • Imports System.IO: É necessária importação da classe System.IO para abrirmos o arquivo;
  • Linhas 4, 5 e 6: declaramos as variáveis que serão utilizadas;
  • Linhas 7, 8, 9 e 10: criamos as colunas do DataGridView;
  • Linha 12: criamos um laço que fará a leitura do arquivo, até o fim deste;
  • Linha 13: lemos uma linha do arquivo, algo como “1997,Ford,E350,3000.00“;
  • Linha 14: utilizamos a função Split para separar os campos da linha;
  • Linha 15:  adicionamos uma linha ao DataGridView e, a ela atribuímos o objeto ArrayCampos;

Como resultado, temos é o seguinte:

Resultado do DataGridView preenchido com arquivo CSV

Concluindo

Vimos que a função Split é bem versátil, você pode utilizá-la de diversas formas dependo do projeto que esteja trabalhando. Como sempre, a implementação dependerá de como você tem que exibir os dados, ainda é possível tratar os dados que estão sendo lidos, você pode querer que seja exibido um valor padrão quando o campo estiver vazio.

Por hoje é só. Até a próxima!

Visual Basic: Resgatando Variáveis de Ambiente

Variáveis de ambiente são variáveis que contém informações do sistema. Por exemplo o caminho da pasta “Arquivos de Programas”. Dependendo do idioma que o computador[bb] estiver configurado esta pasta pode ter outro nome, assim como o sistema pode não ter sido instalado no tradicional Drive C:.

Outro tipo de informação que pode ser resgatada seguindo essa linha[bb], é a pasta “Meus Documentos”. O caminho para está pasta pode ser alterado, ou seja, a pasta “Meus Documentos”, pode ser a pasta “D:documentos”, como poderão ver na imagem abaixo que representa o código desenvolvido como exemplo, exibindo as variáveis de sistema da minha máquina[bb].

Para esse teste criei um formulário com os seguintes objetos:

  • Um Button chamado btnCarregarVariaveis;

  • e um ListBox chamado lbVar;

Vamos ao código.

Antes de mais nada você deve importar a classe responsável pelas variáveis de ambiente.

Imports System.Environment

Para o botão:

Private Sub btnCarregarVariaveis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregarVariaveis.Click
lbVar.Items.Clear()
lbVar.Items.Add("Meus Documentos: " & GetFolderPath(SpecialFolder.MyDocuments))
lbVar.Items.Add("Arquivos de Programas (x86): " & GetFolderPath(SpecialFolder.ProgramFiles))
lbVar.Items.Add("Pasta System32: " & GetFolderPath(SpecialFolder.System))
lbVar.Items.Add("Desktop: " & GetFolderPath(SpecialFolder.Desktop))
lbVar.Items.Add("----------------------------")
lbVar.Items.Add("Drives do Sistema: " & Join(GetLogicalDrives, ", "))
lbVar.Items.Add("Nome do Computador: " & MachineName)
lbVar.Items.Add("Versão do Sistema: " & OSVersion.VersionString)
End Sub

O que estou fazendo.

Linha 2: limpo o ListBox para caso clique duas vezes no botão não preencha duas vezes.

A partir da linha 3 começo a adicionar as variáveis de ambiente ao meu ListBox por meio da função Add da propriedade Items.

Nas linhas 3, 4, 5 e 6 estou utilizando a função GetFolderPath para retornar as variáveis que correspondem a caminhos do sistema, como por exemplo na linha 5 onde é retornado a pasta System32. A função GetFolderPath recebe como parâmetro um Enum SpecialFolder. Com o Enumeration SpecialFolder, temos acesso às pastas do sistema.

Linha 8: Nessa linha utilizei a função GetLogicalDrives que retorna um array com os Drives do sistema, por isso utilizei também a junção Join que retorna uma String a partir de um array, tendo como segundo parâmetro uma String que será utilizada para separar os itens do array.

Linha 9: Função MachineName retorna o nome da máquina.

Linha 10: Propriedade OSVersion contém informações do sistema. Propriedade VersionString retorna a versão do sistema.

É isso galera até uma próxima.

Visual Basic: Encurtando URL com API Migre.me

Está se tornando cada vez mais comum a utilização de encurtadores de URL para compartilhar um link, memorizá-lo de forma mais fácil e até mesmo para fazer pegadinhas.

Há muitos encurtadores de URL, neste post vou mostrar como utilizar a API[bb] do Migre.me, encurtador de URL brasileiro, em um projeto em Visual Basic .NET.

O que é uma API?

API, de Application Programming Interface (ou Interface de Programação de Aplicativos) é um conjunto de rotinas e padrões estabelecidos por um software para a utilização das suas funcionalidades por aplicativos que não pretendem envolver-se em detalhes da implementação do software, mas apenas usar seus serviços. Fonte: Wikipédia

Primeiro criaremos um formulário com duas Labels, dois Textbox e um Button, como na imagem abaixo.

Clique para Ampliar

Os nomes dos Objetos são:

Textbox onde será digitada a URL: txtURL;

Textbox onde será exibido o resultado (URL[bb] encurtada): txtURLEncurtada;

Botão: btnEncurtar;

Vamos ao código.

É necessário importar duas classes, são elas:

Imports System.IO
Imports System.Net

Clicando no botão duas vezes você terá acesso a procedure que corresponde ao evento Click deste.

O código par que a API retorne a URL encurtada é:

    Private Sub btnEncurtar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncurtar.Click
        Dim url As String = "http://migre.me/api.txt?url=" & txtURL.Text

        Dim cliente As New WebClient
        Dim strS As Stream
        strS = cliente.OpenRead(url)

        Dim strR As New StreamReader(strS)

        txtURLEncurtada.Text = strR.ReadToEnd

        strR.Close()
        strS.Close()
    End Sub

Explicarei a seguir cada linha para ficar claro.

Linha 2: Declaração da variável que receberá a URL que deverá ser encurtada. Em seguida, na mesma linha, montamos a URL da API para que está retorne o resultado que queremos.

Entendendo o URL da API: quando solicitamos http:// migre.me/api.txt?url=NossaURLGrande, nos é retornado um arquivo de texto simples (.txt) com a URL já encurtada. Onde NossaURLGrande será a URL digitada.

Linha 4: declaração da variável que será responsável por fazer a solicitação à API.

Linha 5: declaração da variável que receberá o retorno (o arquivo .txt) enviado pela API.

Linha 6: a variável cliente faz a solicitação, por meio da função OpenRead, e armazena o retorno na variável strS.

Linha 8: declaração da variável que lerá a variável strS.

Linha 10: por meio da função ReadToEnd, o conteúdo do retorno da API é armazenado no txtURLEncurtada.

Linha 12 e 13: fecham variáveis que utilizamos para ler o arquivo. Uma forma de indicar que já terminamos de ler, quando trabalhando com arquivos locais a não utilização do método Close, pode impedir que o arquivo[bb] seja aberto por outro programa.

Clique para Ampliar

Lembrete: a API do migre.me limita a quantidade de URL encurtadas em uma hora.

Com isso temos nosso encurtador de URL.

Até uma próxima!

Vídeo

Utilizando a Classe Genérica Dictionary

Nessa vídeo aula[bb]veremos como funciona a classe Dictionary.
Com ela podemos mapear conjuntos de chaves, referenciando a essas chaves[bb]valores.
De uma forma mais intuitiva, podemos criar listas semelhantes a vetores, onde os indices são por exemplo nomes de pessoas, ou lugares, ao invés dos tradicionais número inteiro.

Lendo um Arquivo TXT no VB .NET

Veremos abaixo uma forma bem rápida ler um arquivo .txt no Visual Basic[bb] .NET.

Muitas coisa são formatadas para arquivos .txt, por exemplo NFe ou algumas aplicações que geram esses arquivos para integração[bb]com outros sistemas.

Abaixo você pode ver a forma mais rápida para ler um arquivo.

Imports System.IO
Public Class Form1
    Private Sub btnCarr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarr.Click
        Dim texto As New StreamReader(txtCaminho.Text)
        txtArquivo.Text = texto.ReadToEnd
    End Sub
End Class

Como vocês podem ver esse é todo o código para a leitura de um arquivo.
Lógico que não há um verificação se existe o arquivo, mas com menos de 10 linhas é possível fazer a leitura.
Explicando o código.
Imports System.IO: Importa a Namespace IO que contém as classes necessárias para grande parte das entradas e saídas de texto.

Public Class Form1:  Declaração da classe do nosso formulário.

Private Sub btnCarr_Click: Declaração da procedure do clique no botão para carregar o texto.

Dim texto As New StreamReader(txtCaminho.Text):  Declara a variável texto do tipo StreamReader, classe para abertura de arquivo para leitura. Para criação da instancia é necessário passar o arquivo que será lido.

txtArquivo.Text = texto.ReadToEnd: Lê todo o arquivo e “joga” o texto no campo txtArquivo.

End Sub e End Class: Fim da procedure do botão e fim da classe do formulário, consecutivamente.

Uma outra forma é lendo linha por linha. Dessa forma você tem um controle do que está sendo lido, e pode tomar decisões a partir dai.

Imports System.IO
Public Class Form1
    Private Sub btnCarr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarr.Click
        Dim texto As New StreamReader(txtCaminho.Text)
        While Not texto.EndOfStream
            txtArquivo.Text &= texto.ReadLine
        End While
    End Sub
End Class

Acima vocês podem ver que a única modificação é no momento da leitura, onde um laço controla se é o final do arquivo e o nosso campo txtArquivo recebe linha a linha do arquivo.

Onde:

While Not texto.EndOfStream: Indica que enquanto não for o fim do arquivo e executada uma ação. A cada passagem pelo While,  a leitura é passada para a próxima linha.

txtArquivo.Text &= texto.ReadLine: A ação é a leitura da linha corrente.