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()); } }
//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; } }