none
Ler linha especifica de um TXT RRS feed

  • 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 ?

    terça-feira, 26 de maio de 2015 22:42

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)?


    GTSA 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
    quarta-feira, 27 de maio de 2015 16:41

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 ?

     Ja li a primeira linha de todos os arquivos,agora preciso de algum comando que passe para a próxima linha.
    terça-feira, 26 de maio de 2015 23:01
  • 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 ?!

    quarta-feira, 27 de maio de 2015 01:35
  • 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 txt

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 27 de maio de 2015 11:38
  • 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.


    quarta-feira, 27 de maio de 2015 14:31
    Moderador
  • Posso modificar o txt,pensei em colocar uma identificação no txt que vai ate o fim da linha,mas o que não sei fazer é ir incrementando a linha a cada passada,vou tentar com o contains e indexof.

    Obrigado.

    quarta-feira, 27 de maio de 2015 14:33
  • Aqui esta um exemplo :

    00170838 034.8 MT CUIABA                                             ADMINISTRACAO  

    Nao esta ordenado,sao dados com o Codigo,nota,estado,cidade e cargo.

    quarta-feira, 27 de maio de 2015 14:43
  • Sé é nota com certeza deve ter numero, o que torna facil a pesquisa, tudo depende do que esta a procurar no arquivo.

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 27 de maio de 2015 14:45
  • 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.

    quarta-feira, 27 de maio de 2015 14:46
    Moderador
  • 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.

    quarta-feira, 27 de maio de 2015 14:57
  • 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)?


    GTSA 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
    quarta-feira, 27 de maio de 2015 16:41
  • 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?

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 27 de maio de 2015 16:44
  • Ordenacao externa,agora consegui,Obrigado.
    quarta-feira, 27 de maio de 2015 16:50
  • Há blz então

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 27 de maio de 2015 16:51