none
Leitura de Arquivo .CSV (Problema na hora de ler arquivos acentuados) C# RRS feed

  • Pergunta

  • Pessoal, bom dia/tarde

    Eu tenho um código que insere em um .CSV uma coluna chamada "UNB", os valores do "UNB" são o nomes que estão renomeados no Arquivo e isso acontece em 80+ CSVs.. O meu problema é que basicamente ao rodar o programa, algumas colunas com acentos, tais como : "Não", "Código" - ficam assim -> Cód | Não

    - Me parece que não está interpretando os acentos.

    Na chamade File.OpenReadAllLines / já tentei colocar todos Encoding possíveis e mesmo assim não funciona.. Se puderem ajudar, vou agradecer bastante.

    Vou deixar em anexo o código, abraços!

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace Insere_UNB_em_CSV
    {
    
        class UnbCsv
        {
    
            private string caminhoDiretorio = @"D:\CSVs";
    
            public void ListaArquivosDiretorio()
            {
    
                DirectoryInfo d = new DirectoryInfo(caminhoDiretorio);
                FileInfo[] Files = d.GetFiles("*.csv");
                foreach (FileInfo file in Files)
    
                {
                    InsereColuna(file.Name);
                    Console.WriteLine(file.Name);
    
                }
            }
    
           private void InsereColuna(string file)
            {
    
                string caminho = caminhoDiretorio.Substring(caminhoDiretorio.Length) == @"\\" ? caminhoDiretorio : caminhoDiretorio + @"\\";
    
                if (!Directory.Exists(caminho + @"\\Transformados"))
    
                {
                    Directory.CreateDirectory(file + @"\\Transformados");
                }
    
                
                string[] CSVDump = File.ReadAllLines(caminho + file, Encoding.GetEncoding("iso-8859-1"));
    
                List<List<string>> CSVList = CSVDump.Select(x => x.Split(';').ToList()).ToList();
    
                string f = "";
    
                var possuiColunaUnb = CSVList[0].Any(x => x.ToLower() == "unb");
    
                Console.WriteLine(file);
    
                if (!possuiColunaUnb)
    
                {
                    for (int i = 0; i < CSVList.Count; i++)
    
                    {
                        f = file.Substring(3, 3);
                        CSVList[i].Insert(CSVList[i].Count - 1, i == 0 ? "Unb" : f);
                    }
    
    
                    File.WriteAllLines(caminho + @"Transformados\\" + file, CSVList.Select(x => string.Join(";", x)));
    
                }
    
    
            }
    
        }
    }
    


    Rafael Marvila IT Profissional

    sábado, 30 de julho de 2016 12:26

Todas as Respostas

  • Rafael,

    Faça o seguinte:
    1- Abra o WordPad no seu computador e copie os comandos do script.bat e cole no WordPad. Quando fizer isso:
    2-  Vá em salvar como(salve as type) e em tipo selecione "Documento de Texto - Formato MS-DOS(Text Document - MS-DOS Format).  Salve o arquivo. O arquivo ficará no formato txt. 
    3- Depois vá onde salvou o arquivo, abra-o com o bloco de notas. Clique em arquivo com o bloco de notas aberto e em salvar como, salve-o com a extensão .cmd

    Pronto! Execute o .cmd e seja feliz.


    Observação:
     Caso essa resposta seja útil, clique em propor como resposta.
    Site Pessoal (Artigos, Dicas, WebCast voltado a área Microsoft) : https://diegogouveia.com.br/
    sábado, 30 de julho de 2016 22:07
  • Olá,

    altere esta linha:

    string[] CSVDump = File.ReadAllLines(caminho + file, Encoding.GetEncoding("iso-8859-1"));

    para

    string[] CSVDump = File.ReadAllLines(caminho + file, Encoding.GetEncoding("utf-8"));

    veja se funciona.

    Abs.


    Leandro de Agostini MCTS - Web Application, Framework 4

    quinta-feira, 1 de setembro de 2016 18:18