Usuário com melhor resposta
Ler linha especifica de um TXT

Pergunta
-
Tenho 40 arquivos txts e preciso fazer o seguinte:
Ler a primeira linha do arquivo 1,ler a primeira linha do arquivo 2...
depois tenho que ler a segunda linha do arquivo 1,ler a segunda linha do arquivo 2...
Mas nao posso armazenar todos os dados do arquivo em um vetor,
Algum comando para que eu possa passar o valor da linha que quero ler ?
Respostas
-
O que você pode fazer:
1 - Em um loop for fazer a leitura do tamanho de todos os arquivos;
int j = 0; bool acabou = false; //Acumular somente as primeiras linhas lidas de cada arquivo //List<string[]> linhas = new List<string[]>(); string[] files = Directory.GetFiles(diretorio, "split*.dat"); while (!acabou) { //leitura dos arquivos foreach (string item in files) { FileInfo file = new FileInfo(item); //le todas as linhas //Opção 2 //linhas.Add(File.ReadAllLines(file.FullName,Encoding.UTF8)); using (StreamWriter gravar = new StreamWriter("resultado.txt", true, Encoding.UTF8)) { //Le a linha de cada arquivo somente uma string temp = File.ReadAllLines(file.FullName, Encoding.UTF8)[j]; gravar.WriteLine(temp); //Opção 2 //gravar.WriteLine(linhas[0][j]); gravar.Flush(); //linhas.Clear();
temp=null; } } j++; //Aqui você tera que determinar o verificador quando chegar a ler o final de cada arquivo }
Só não entendi uma coisa, você vai gravar em outro arquivo a mesma estrutura mista (contendo a ordem de leitura de cada arquivo)?
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Editado Mr. GMSOFT quarta-feira, 27 de maio de 2015 16:42
- Marcado como Resposta lRafael quarta-feira, 27 de maio de 2015 16:50
Todas as Respostas
-
Tenho 40 arquivos txts e preciso fazer o seguinte:
Ler a primeira linha do arquivo 1,ler a primeira linha do arquivo 2...
depois tenho que ler a segunda linha do arquivo 1,ler a segunda linha do arquivo 2...
Mas nao posso armazenar todos os dados do arquivo em um vetor,
Algum comando para que eu possa passar o valor da linha que quero ler ?
-
Crie uma variavel fora do laço de leitura, adicione +1 a cada passada, pronto.
Faça seus ifs tipo (linha == 5) { x} else if (linha > 8 and linha < 16) {...}
Entendeu ? Eu faria assim, perder desempenho perde, só que dependendo do seu caso, está seria uma solução mais viavel no quesito tempo x beneficio x produtividade.
Certo ?!
-
Supondo que já tenha o método para leitura do arquivo, você pode usar o CONTAINS ou INDEXOF.
Seus txt tem alguma informaçao especifica a ser localizada? seria interessante postar a disposição do seu txtA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
Que tipo de texto tens?
sera que o texto e o farmato de uma base de dados? quero dizer tabela?
A flower cannot blossom without sunshine, and man cannot live without love.
- Editado Levi DomingosModerator quarta-feira, 27 de maio de 2015 14:32
-
-
-
-
Ok, entendi
tem a extrutura de uma tabela
Codigo Nota Estado Cidade Cargo
@IRAFAEL, voce deveria usar xml e nao txt formato. ficaria mais facil e performance tambem.
isto de ter texto nao e boa coisa, voce queizer fazer alteracoes, update, fica complicado amigo...
A flower cannot blossom without sunshine, and man cannot live without love.
-
Mas nao tenho que fazer pesquisa,eu preciso varrer todo txt,sendo que a cada passada eu tenho que ler a linha especifica dos 40 arquivos que tenho,e preciso armazenar em outro txt esses dados,que no caso,vai ser 40,ja que tenho que ler cada linha e tenho 40 arquivos,ja esta tudo certo,so preciso ler a próxima linha de cada arquivo.
string[] arquivos = Directory.GetFiles(diretorio, "split*.dat");
StreamReader file = new StreamReader(arquivos[i]);
string dados = file.ReadLine();
tenho isso,mas como você pode ver ele vai ler somente a primeira linha do arquivo.
-
O que você pode fazer:
1 - Em um loop for fazer a leitura do tamanho de todos os arquivos;
int j = 0; bool acabou = false; //Acumular somente as primeiras linhas lidas de cada arquivo //List<string[]> linhas = new List<string[]>(); string[] files = Directory.GetFiles(diretorio, "split*.dat"); while (!acabou) { //leitura dos arquivos foreach (string item in files) { FileInfo file = new FileInfo(item); //le todas as linhas //Opção 2 //linhas.Add(File.ReadAllLines(file.FullName,Encoding.UTF8)); using (StreamWriter gravar = new StreamWriter("resultado.txt", true, Encoding.UTF8)) { //Le a linha de cada arquivo somente uma string temp = File.ReadAllLines(file.FullName, Encoding.UTF8)[j]; gravar.WriteLine(temp); //Opção 2 //gravar.WriteLine(linhas[0][j]); gravar.Flush(); //linhas.Clear();
temp=null; } } j++; //Aqui você tera que determinar o verificador quando chegar a ler o final de cada arquivo }
Só não entendi uma coisa, você vai gravar em outro arquivo a mesma estrutura mista (contendo a ordem de leitura de cada arquivo)?
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Editado Mr. GMSOFT quarta-feira, 27 de maio de 2015 16:42
- Marcado como Resposta lRafael quarta-feira, 27 de maio de 2015 16:50
-
Com o código acima eu consegui ler exatamente as linhas como você falou, só não entendi por que ler as primeiras linhas de cada arquivo e salvar em outro.
Suponho que fará outra coisa com esse processo e esteja testando a função correto?A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
-