ASP .NET - Upload e leitura de arquivos CVS


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.

Neste artigo eu mostro como fazer o upload e importar arquivos CSV no formato padrão (delimitados por vírgula) em uma aplicação ASP .NET e em seguida ler o conteúdo do arquivo CSV enviado exibindo o seu conteúdo na página web.

Para demonstrar como usar este recurso eu vou usar o Visual Web Developer 2008 Express Edition e criar um novo web site (New Web Site) usando o template ASP .NET Web Site chamado ImportCSV usando a linguagem Visual Basic.(poderíamos ter usado a linguagem C#)

A seguir na página Default.aspx criada por padrão no web site vamos incluir os seguintes controles:

Usando os controles acima vamos definir na página Default.aspx o leiaute conforme exibida na figura abaixo:

Primeiro enviamos um arquivo usando o controle FileUpload , a seguir o arquivo é recebido em uma pasta existente na nossa aplicação. Vamos então criar a pasta no projeto:

Clique com o botão direito do mouse sobre o nome do projeto e selecione New Folder e informe o nome ArquivosCSV;

Veja como deve ficar a estrutura do projeto:

Agora vamos definir o código no arquivo code-behind Default.aspx.vb.

Inicialmente no inicio do arquivo devemos definir o namespace : System.IO

A seguir no evento Click do botão Enviar Arquivo (btnEnviar) vamos incluir o código abaixo:

Protected Sub btnEnviar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnviar.Click

If (FileUploader.HasFile) Then
  Try
         FileUploader.SaveAs((Server.MapPath("ArquivosCSV//") + FileUploader.FileName))

         Label1.Text = ("Nome do Arquivo: "
& (FileUploader.PostedFile.FileName + ("<br>" _
                            
 & (FileUploader.PostedFile.ContentLength & (" kb <br>" & ("Tipo de conteudo: " _
                             
& (FileUploader.PostedFile.ContentType & "<br><b>Enviado com sucesso")))))))

  Catch ex As Exception
          Label1.Text = "ERRO : " & ex.Message.ToString()
  End Try
Else
    Label1.Text = "Você não especificou nenhum arquivo."
End If
End Sub

Com este singelo código estamos enviando os arquivos para a pasta ArquivosCSV definida no projeto.

Agora no evento Click do botão de comando Ler Arquivo CSV vamos incluir o código abaixo que irá ler o arquivo enviado e exibir o seu conteúdo:

Protected Sub btnLerCSV_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLerCSV.Click

Dim arquivo As String = ""

If (FileUploader.PostedFile.FileName = String.Empty) Then
    arquivo = Server.MapPath(".") + "\ArquivosCSV\" + txtArquivo.Text
Else
    arquivo = Server.MapPath(".") + "\ArquivosCSV\" + FileUploader.PostedFile.FileName
End If

Dim sr As StreamReader
Try
   sr = New StreamReader(arquivo)
   Dim linha As String = ""

   While True
        linha = sr.ReadLine
       If linha = Nothing Then
            Exit While
       End If

       Label1.Text = Label1.Text
& linha & "<br>"

       'exibe cada campo de cada linha 
       Dim delimitador As String = txtDelimitador.Text
       Dim saida = Split(linha, delimitador)

      Label2.Text = Label2.Text
& linha & "<br>"

      For i = 0 To UBound(saida)
            Label2.Text
&= i + 1 & ") " & saida(i) & "<br>"
      Next

   End While
    sr.Close()
Catch ex As Exception
    Label1.Text = " Erro : " + ex.Message
End Try
End Sub

O código acima obtém o nome do arquivo e primeiro extrai linha a linha exibindo cada uma no controle Label1.

Em seguida também estamos separando os campos de cada linha e exibindo no controle Label2.

Para testar eu criei um arquivo delimitado chamado testecsv.txt com o seguinte conteúdo:

macoratti,macoratti@yahoo.com,teste
macoratti,macoratti@yahoo.com,teste
macoratti,macoratti@yahoo.com,teste
macoratti,macoratti@yahoo.com,teste
macoratti,macoratti@yahoo.com,teste
macoratti,macoratti@yahoo.com,teste

Após importar o arquivo enviando para a nossa pasta ArquivosCSV podemos verificar o arquivo recebido:

Após isso lendo o conteúdo do arquivo iremos obter:

Este artigo tem o objetivo de mostrar que usando os recursos da ASP .NET podemos importar e ler o conteúdo de arquivos CSV de forma bem simples.

Dessa forma você pode ter uma idéia de como realizar tarefas envolvendo upload de arquivos CSV bem como sua leitura.

A rotina não é genérica e o exemplo foi usado levando em conta apenas arquivos delimitados com virgula mas você pode adaptar este detalhe ao seu caso.

Até o próximo artigo ASP .NET.

Pegue o projeto completo aqui: ImportCSV.zip

Eu sei é apenas ASP .NET, mas eu gosto...

Referências:

José Carlos Macoratti