Neste artigo vamos mostrar como converter um arquivo CSV(Comma Separated Value) em um arquivo XML bem formatado usando os recursos do LINQ to XML. |
O que é um arquivo CSV ?
Um arquivo CSV (Comma Separated Value) é um formato de arquivo que é normalmente usado para troca de dados entre aplicações diferentes. O arquivo no formato CSV possui os dados delimitados onde os campos são separados pelo caractere vírgula e registros separados por uma nova linha. Este formato de arquivo é usado no Microsoft Excel ,e tornou-se um pseudo padrão para a indústria mesmo entre plataformas não Microsoft.
Embora não exista uma especificação formal para o formato CSV, a RFC 4180 descreve um formato comum e estabelece o tipo MIME "text/csv" .
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.
Gerar arquivos CSV é muito simples e envolve conceitos básicos mas importantes que todo o desenvolvedor .NET deve conhecer.
Para o exemplo usado neste artigo a primeira linha do arquivo CSV deverá conter o nome dos campos do arquivo.
A seguir temos um exemplo do arquivo Clientes_CSV.txt no formato que iremos tratar para gerar o arquivo XML.
Nome, Sobrenome, Email, Cidade, Telefone
Joao, Silva, joaosilva@uol.com.br, Curitiba, 11-98504000
Janice, Santaos, jansantos@bol.com.br, Niteroi,21-85202010
Jessica, Alba, jessalba@yahoo.com, Brasilia, 61-7850-6050
Marcia, Almeida, marciaalm@uol.com.br, Santos, 11-9874-6040
Paulo, Soares, paulosoares@net.com, Osasco, 11-9840-7080
Amanda, Rodrigues, amanrodrig@ig.com.br, Caxias, 81-5805-6012
|
Ao arquivo acima irá gerar o arquivo XML no seguinte formato:
Ferramentas usadas:
Criando o projeto no Visual Studio 2013 Express
Abra o VS 2013 for Windows desktop e clique em New Project;
Selecione a linguagem Visual C# e o template Windows Forms Application e informe o nome CSharp_CSV_XML;
No formulário form1.cs inclua os seguintes controles a parti da ToolBox:
O leiaute do formulário deverá ficar como o da figura abaixo:
Agora clique no menu PROJECT e a seguir em Add Class;
Selecione o template Class, informe o nome ConversorCSV_XML.cs e clique no botão Add:
A seguir vamos definir os namespaces necessários ao nosso projeto:
using System;
using System.Xml.Linq;
Após isso digite o código abaixo para a classe ConversorCSV_XML.cs :
public static XDocument Converte_CSV_Para_XML(string csvString, string[] separadorCampo)
{
//separa as linhas do arquivo CSV
var sep = new[] { "\r\n" };
string[] linhas = csvString.Split(sep, StringSplitOptions.RemoveEmptyEntries);
//Cria uma declaração XML
var xsurvey = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"));
//Cria o elemento raiz do XML
var xroot = new XElement("root");
//percorre cada linha do arquivo CSV
for (int i = 0; i < linhas.Length; i++)
{
//Cria cada linha
if (i > 0)
{
xroot.Add(gera_Linha_XML(linhas[i], linhas[0], separadorCampo));
}
}
xsurvey.Add(xroot);
return xsurvey;
}
|
A seguir clique novamente no menu PROJECT e a seguir em Add Class;
Selecione o template Class, informe o nome gera_Linha_XML.cs e clique no botão Add:
Em seguida digite o código abaixo para esta classe:
private static XElement gera_Linha_XML(string linha,string primeiraLinha, string[] separadorCampo)
{
//separa os campos da linha do arquivo CSV
string[] temp = linha.Split(separadorCampo, StringSplitOptions.None);
//separa o nome dos campos da primeira linha do arquivo CSV
string[] nomes = primeiraLinha.Split(separadorCampo, StringSplitOptions.None);
//cria um novo elemento row
var xmlLinha = new XElement("row");
for (int i = 0; i < temp.Length; i++)
{
//Cria o elemento var e os atributos com o nome do campo e valor
var xvar = new XElement("var",
new XAttribute("name", nomes[i]),
new XAttribute("value", temp[i]));
xmlLinha.Add(xvar);
}
return xmlLinha;
}
|
No evento Click do botão - Converter CSV para XML - inclua o código abaixo :
private void btnConverter_Click(object sender, EventArgs e)
{
try
{
//le o conteúdo do arquivo texto
string arquivo_CSV = File.ReadAllText(txtArquivoCSV.Text);
//chama o método para converter o CSV para XML e gera um XDocument
XDocument docXML = ConversorCSV_XML.Converte_CSV_Para_XML(arquivo_CSV, new[] { "," });
//Salva o arquivo XML
docXML.Save(@"c:\dados\Clientes_CSV.xml");
//escreve a primeira linha do XML no textBox
txtXML.Text = docXML.Declaration.ToString();
//escreve cada linha do XML no TextBox
foreach (XElement c in docXML.Elements())
{
txtXML.Text += c.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
Executando o projeto vemos abaixo um exemplo de resultado obtido para a conversão de um arquivo CSV para XML :
Pegue o projeto completo aqui : CSharp_CSV_XML.zip
Joã 3:35 O Pai ama ao Filho, e todas as coisas entregou nas suas mãos.
Joã 3:36 Quem crê no Filho tem a vida eterna; o que, porém, desobedece ao Filho não verá a vida, mas sobre ele permanece a ira de Deus.
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#