示例#1
0
        //Método LerLinha(): processa uma linha de um arquivo .csv, transformando Stream em CsvLinha
        public bool LerLinha(CsvLinha linha, char separator)
        {
            //tenta ler arquivo
            try
            {
                //se arquivo vazio, termina
                linha.TextoLinha = ReadLine();
                if (String.IsNullOrEmpty(linha.TextoLinha))
                {
                    return(false);
                }

                int pos        = 0;
                int linhaAtual = 0;

                //itera por cada caracter do arquivo
                while (pos < linha.TextoLinha.Length)
                {
                    string valor;

                    //trata os casos em que o elemento atual da leitura é ' " '
                    if (linha.TextoLinha[pos] == '"')
                    {
                        pos++;

                        //marca inicio das aspas e busca final
                        int start = pos;
                        while (pos < linha.TextoLinha.Length)
                        {
                            //encontrando o par da ", termina busca
                            if (linha.TextoLinha[pos] == '"')
                            {
                                pos++;

                                //trata caso não exista par para as aspas duplas que iniciaram essa busca
                                if (pos >= linha.TextoLinha.Length || linha.TextoLinha[pos] != '"')
                                {
                                    pos--;
                                    break;
                                }
                            }
                            pos++;
                        }

                        //adiciona \" no inicio e fim das aspas para que perteçam a string gerada
                        valor = linha.TextoLinha.Substring(start, pos - start);
                        valor = valor.Replace("\"\"", "\"");
                    }
                    //caso não sejam aspas
                    else
                    {
                        //adiciona trecho sem aspas a string gerada
                        int inicio = pos;
                        while (pos < linha.TextoLinha.Length && linha.TextoLinha[pos] != separator)
                        {
                            pos++;
                        }
                        valor = linha.TextoLinha.Substring(inicio, pos - inicio);
                    }

                    //se nao foi a linha final, a string gerada representa esta linha, senao adiciona ao final
                    if (linhaAtual < linha.Count)
                    {
                        linha[linhaAtual] = valor;
                    }
                    else
                    {
                        linha.Add(valor);
                    }
                    linhaAtual++;

                    //trata espaçamento criado pelo caracter separador
                    while (pos < linha.TextoLinha.Length && linha.TextoLinha[pos] != separator)
                    {
                        pos++;
                    }
                    if (pos < linha.TextoLinha.Length)
                    {
                        pos++;
                    }
                }
                //remove linha excessiva
                while (linha.Count > linhaAtual)
                {
                    linha.RemoveAt(linhaAtual);
                }


                return(linha.Count > 0);
            }
            catch (Exception ex)
            {
                ex.ToString();
                throw;
            }
        }
示例#2
0
        public static void Main()
        {
            //le arquivo CEPs.csv
            using (CsvEditor leitor = new CsvEditor("../../../../../CEPs.csv"))
            {
                StringBuilder novoArquivo = new StringBuilder();
                CsvLinha      linha       = new CsvLinha();
                char          separador   = ';';

                //trata primeira linha de rotulos
                leitor.LerLinha(linha, separador);
                string novaLinha = string.Format("{0}; {1}; {2}; {3}; {4}; {5}; {6}; {7}; {8}\n", linha[0], linha[1], linha[2], linha[3], linha[4], linha[5], linha[6], linha[7], linha[8]);
                novoArquivo.Append(novaLinha);


                //itera linha a linha
                while (leitor.LerLinha(linha, separador))
                {
                    //produz endereco baseado no cep contido na primeira celula da linha
                    StringBuilder url = new StringBuilder();
                    url.Append("http://viacep.com.br/ws/");

                    string cepLido = linha[0];

                    url.Append(String.Format("{0}/json", cepLido));
                    using (WebClient client = new WebClient())
                    {
                        //acessa endereco gerado
                        try
                        {
                            string webData = client.DownloadString(url.ToString());

                            int  pos = 0;
                            bool conteudoRelevante = false;

                            //itera sobre cada caractere do endereco, registrando conteudo relevante na string geradora do arquivo final
                            while (pos < webData.Length)
                            {
                                if (webData[pos] == ':')
                                {
                                    pos += 3;
                                    conteudoRelevante = true;
                                }
                                if (conteudoRelevante && webData[pos] != '"')
                                {
                                    novoArquivo.Append(webData[pos]);
                                }
                                else if (conteudoRelevante)
                                {
                                    novoArquivo.Append("; ");
                                    conteudoRelevante = false;
                                }
                                pos++;
                            }
                            novoArquivo.Append("\n");
                        }
                        catch (Exception e)
                        {
                            //pula linha caso CEP nao esteja em formato aceito pelo site
                            Console.WriteLine("O CEP informado não tem formato valido");
                            novoArquivo.Append(String.Format("{0}; ; ; ; ; ; ; \n", cepLido));
                        }
                    }
                }

                //usa string gerada para produzir arquivo de resultado

                File.WriteAllText("../../../CEPs - cópia.csv", novoArquivo.ToString());
            }
        }