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: