예제 #1
0
        public static void Main()
        {
            //acessa arquivo necessario
            using (CsvEditor leitor = new CsvEditor("../../../../../mapa.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}\n", linha[0], linha[1]);
                novoArquivo.Append(novaLinha);

                //le cada linha, dobrando valores da coluna 'populacao'. escreve resultados em string
                while (leitor.LerLinha(linha, separador))
                {
                    string localizacao = linha[0];
                    string populacao   = (Int32.Parse(linha[1]) * 2).ToString();
                    novaLinha = string.Format("{0}; {1}\n", localizacao, populacao);
                    novoArquivo.Append(novaLinha);
                }

                //usa string gerada para produzir arquivo de resultados
                File.WriteAllText("../../../resultado.csv", novoArquivo.ToString());
            }
        }
예제 #2
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;
            }
        }