ASP .NET - Lendo um arquivo CSV (revisitado)


 Hoje vamos recordar como ler um arquivo CSV em uma aplicação ASP .NET Web Forms.     

Hoje vamos recordar como ler um arquivo texto em uma aplicação ASP .NET exibindo as informações na página Web Forms. (Embora a tecnologia Web Forms esteja obsoleta ainda existe o legado. E que legado !!!)

A classe StreamReader fornece muitos métodos e propriedades úteis para ler linhas de informação de um arquivo de texto padrão. Esta classe implementa um leitor de texto que lê caracteres de um fluxo de bytes em uma codificação específica.

Os dados CSV (ou Comma Separated Value) do artigo estão armazenados em um arquivo .txt. Temos uma lista de planetas no arquivo, cada linha (de dados) é separada por uma vírgula. Usando métodos de classe StreamReader, podemos extrair facilmente os dados CSV exibindo-os na página Web.

Vamos ler dados do arquivo planetas.txt  que vai estar na pasta c:\dados\txt e que contém os seguintes dados sobre os planetas do sistema solar: Codigo, Nome e diâmetro:

MER,Mercurio,4880
VEN,Venus,12104
TER,Terra,12756
MAR,Marte,6794
JUP,Jupiter,143000
SAT,Saturno,120000
URA,Urano,51000
NET,Netuno,49500
O objetivo é acessar o arquivo e ler seu conteúdo exibindo em uma tabela HTML.

Então mãos à obra...

Criando o projeto ASP .NET WEB Forms no VS 2017

Após esse procedimento abra o VS 2017 Community e selecione File ->New Project;

Selecione Web e o template ASP .NET Web Application e informe o nome Asp_LeCSV e clique em OK;

A seguir inclua uma página Web Form com o nome Default.aspx no projeto e crie uma pasta chamada Imagens no projeto onde vamos armazenar uma imagem sisolar.jpg para exibir na página.

Abaixo vemos a estrutura do projeto com a página e a pasta Imagens já contendo a imagem:

Abra o arquivo Default.aspx e inclua o código abaixo:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
Inherits="ASP_LerCSV.Default" ResponseEncoding="utf-8" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Ler arquivo CSV</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
    .header, .d {
        display:inline-table;
        width:30%;
        border:solid 1px #CCC;
        padding:3px;
        font:13px Verdana;
    }
    .header {
        font-weight:bold;
    }
</style>
</head>
<body>
    <form id="form1" runat="server">
        <img src="Imagens/sisolar.jpg" />
        <hr />
        <div id="planetas" runat="server" style="width:50%;"></div>
    </form>
</body>
</html>

No código definimos um estilo a ser aplicado na página, estamos exibindo a imagem e definimos uma div com o nome planetas onde vamos renderizar o conteúdo lido do arquivo texto.

A seguir abra o arquivo code-behind Default.aspx.cs e inclua o código abaixo:

using System;
using System.IO;
using System.Web.UI;
namespace ASP_LerCSV
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (! Page.IsPostBack)
            {
                LerDadosCSV(@"c:/dados/txt/planetas.txt");
            }
        }
        private void LerDadosCSV(string sfileName)
        {
            // Cria uma instância de StreamReader para ler o arquivo
            using (StreamReader sr = new StreamReader(sfileName))
            {
                // cabeçalho
                planetas.InnerHtml = "<div class='header'>Código</div><div class='header'>Nome</div>
<div class='header'>Diâmetro(KM)</div>";
                do
                {
                    string s = sr.ReadLine();           // Le a linha de caracteres do stream.
                    string[] arrData = s.Split(',');    // armazena no array
                    // Le os valores do array
                    for (int i = 0; i <= arrData.GetUpperBound(0); i++)
                    {
                        planetas.InnerHtml = planetas.InnerHtml + "<div class='d'>" + 
ConverterStringAcentuada(850,arrData[i]) + "</div>";
                    }
                    planetas.InnerHtml = planetas.InnerHtml + "<br />";       // Vai para proxima linha.
                } while (!(sr.EndOfStream));
            }
        }
        //CodePage - 850
        public string ConverterStringAcentuada(int codepage, string texto)
        {
            return System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(codepage)
.GetBytes(texto));
        }
    }
}

Neste código usamos a classe StreamReader para ler o arquivo planetas.txt e lemos cada linha armazenando em um array que a seguir é percorrido e cada coluna é inserida em uma tabela HTML.

O método ConverterStringAcentuada() pode ser usado para converter algum texto com caracteres acentuados.

Executando o projeto iremos obter o seguinte resultado:

Simples assim...

Pegue o projeto aqui :  ASP_LerCSV.zip (sem as referências)

(Jesus a seus discípulos) "Na verdade, na verdade vos digo que vós chorareis e vos lamentareis, e o mundo se alegrará, e vós estareis tristes, mas a vossa tristeza se converterá em alegria."
João 16:20

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

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti