none
Ler linhas em uma string RRS feed

  • Pergunta

  • Bom dia,

    Tenho uma string com que contém a seguinte estrutura:

     

     

    XXXXXXX

     

    40

     

    vvvvvv

     

    40

     

    um texto uma linha em branco e um numero.Como Consigo ler linha a linha dessa string? 

     

    Obrigado

     


    Rodolfo Scotolo
    segunda-feira, 28 de novembro de 2011 13:12

Respostas

  • Imaginei que tivesse recuperando de um arquivo texto mesmo.

    Como você tem um separador, pode usar split, como escrevi acima. Para ler linha por linha vai usar o Peek() da classe StreamReader da seguinte forma:

    System.IO.StreamReader reader = new System.IO.StreamReader(@"C:\Temp\teste.txt");
     
    while (reader.Peek() != -1)
    {
      //vai ler linha por linha
    }
    


    Aqui escrevi um texto respondendo uma dúvida de uma colega aqui do fórum. Ela tinha que várias linhas de um arquivo texto onde em cada linha continha informações separadas por ponto e vírgula. Acredito que vai resolver teu problema.

    http://news.pcfviana.com/?p=110

     


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    • Marcado como Resposta Rodolfo Scotolo terça-feira, 29 de novembro de 2011 12:19
    segunda-feira, 28 de novembro de 2011 13:49
  • Mas o valor original não está em um arquivo texto?

    Me passa o valor da variável certinho.....

    Segue a solução:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("ABCDE");
                sb.AppendLine("");
                sb.AppendLine("123456");
                sb.AppendLine("");
                sb.AppendLine("FGHIJ");
                sb.AppendLine("");
                sb.AppendLine("321456");
    
                Console.WriteLine("Texto com quebra de linhas");
                Console.WriteLine("");
                Console.WriteLine(sb.ToString());
                Console.WriteLine("");
    
                Console.WriteLine("Texto sem quebra de linhas");
                Console.WriteLine("");
    
                string text = sb.ToString();
                using (StringReader reader = new StringReader(text))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (line != string.Empty)
                        {
                            Console.WriteLine(line);
                        }
                    }
                }
                Console.ReadLine();      
           }
        }
    }
    
    

     


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    • Marcado como Resposta Rodolfo Scotolo terça-feira, 29 de novembro de 2011 12:19
    segunda-feira, 28 de novembro de 2011 16:04
  • Rodolfo,

    É só utilizar o método Split da classe string... Tente fazer um split pelo caractere \n (quebra de linha):

    string[] linhas = texto.Split('\n');


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    segunda-feira, 28 de novembro de 2011 21:45
    Moderador
  •       StreamWriter valor = new StreamWriter("D:\\test.txt", true, Encoding.UTF8);
                    valor.Write(texto);
                    valor.Close();
    
                    System.IO.StreamReader reader = new System.IO.StreamReader(@"D:\\test.txt");
    
                    string line;
                    List<string> lines = new List<string>();
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (line != string.Empty)
                        {
                          lines.Add(line)  ;
                        }
                    }
    
                    reader.Close();
    
                    System.IO.StreamWriter writer = new System.IO.StreamWriter(@"D:\\test.txt");
    
    
                    foreach (string a in lines)
                    {
                        writer.Write(a + "\n");
                        
                        
                    }
                    writer.Close();
    

    Funcionou com o código acima.Só acho que dei muita volta, creio que da pra "otimizar" esse codigo.
    Obrigado,

    Rodolfo Scotolo
    terça-feira, 29 de novembro de 2011 12:07

Todas as Respostas

  • Isto fica onde?? Não entendi. Você usou um StringBuilder?? Se for espaço você pode fazer um Split pelo espaço e depois percorrer o array de string com um foreach.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    segunda-feira, 28 de novembro de 2011 13:21
  • não usei o StringBuilder,

     

    Uma variavel enorme que contem todos esses valores.

    A fim de teste,"printei" ela em um txt, que me retorna, a variavel na forma que postei.

    Porém preciso pegar cada uma da linhas mostradas.

    Pensei em duas opções, ler a variavel da forma "grafica" e pegar linha a linha, o ler ela da forma original e pegar a separação de linha pelo caracterer limitador.

    Em ambos os casos não como proceder, e nem se é possivel conseguir "ler" tal caracterer.

     

     

    Obrigado 

     


    Rodolfo Scotolo
    segunda-feira, 28 de novembro de 2011 13:36
  • Imaginei que tivesse recuperando de um arquivo texto mesmo.

    Como você tem um separador, pode usar split, como escrevi acima. Para ler linha por linha vai usar o Peek() da classe StreamReader da seguinte forma:

    System.IO.StreamReader reader = new System.IO.StreamReader(@"C:\Temp\teste.txt");
     
    while (reader.Peek() != -1)
    {
      //vai ler linha por linha
    }
    


    Aqui escrevi um texto respondendo uma dúvida de uma colega aqui do fórum. Ela tinha que várias linhas de um arquivo texto onde em cada linha continha informações separadas por ponto e vírgula. Acredito que vai resolver teu problema.

    http://news.pcfviana.com/?p=110

     


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    • Marcado como Resposta Rodolfo Scotolo terça-feira, 29 de novembro de 2011 12:19
    segunda-feira, 28 de novembro de 2011 13:49
  • Existe alguma maneira de fazer o mesmo sem precisar usar um arquivo texto?

     

    Obrigado,


    Rodolfo Scotolo
    segunda-feira, 28 de novembro de 2011 14:31
  • Mas o valor original não está em um arquivo texto?

    Me passa o valor da variável certinho.....

    Segue a solução:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("ABCDE");
                sb.AppendLine("");
                sb.AppendLine("123456");
                sb.AppendLine("");
                sb.AppendLine("FGHIJ");
                sb.AppendLine("");
                sb.AppendLine("321456");
    
                Console.WriteLine("Texto com quebra de linhas");
                Console.WriteLine("");
                Console.WriteLine(sb.ToString());
                Console.WriteLine("");
    
                Console.WriteLine("Texto sem quebra de linhas");
                Console.WriteLine("");
    
                string text = sb.ToString();
                using (StringReader reader = new StringReader(text))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (line != string.Empty)
                        {
                            Console.WriteLine(line);
                        }
                    }
                }
                Console.ReadLine();      
           }
        }
    }
    
    

     


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    • Marcado como Resposta Rodolfo Scotolo terça-feira, 29 de novembro de 2011 12:19
    segunda-feira, 28 de novembro de 2011 16:04
  • Rodolfo,

    É só utilizar o método Split da classe string... Tente fazer um split pelo caractere \n (quebra de linha):

    string[] linhas = texto.Split('\n');


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    segunda-feira, 28 de novembro de 2011 21:45
    Moderador
  • Rodolfo,

    É só utilizar o método Split da classe string... Tente fazer um split pelo caractere \n (quebra de linha):

    string[] linhas = texto.Split('\n');


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    André,

    Foi justamente o que pensei.. um simples split ia resolver. Mas no caso dele não funciou. Pelo menos nos meus testes....


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    terça-feira, 29 de novembro de 2011 10:10
  • Rodolfo,

    É só utilizar o método Split da classe string... Tente fazer um split pelo caractere \n (quebra de linha):

    string[] linhas = texto.Split('\n');


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    André,

    Foi justamente o que pensei.. um simples split ia resolver. Mas no caso dele não funciou. Pelo menos nos meus testes....


    --
    Marque as respostas e ajude a melhorar a busca do fórum.

     

        Paulo estou pensando em levar em conta da forma que fez, criando um txt temporario!
       Só não sei o quanto isso vai impactar no processamento do aplicativo, visto que provavelmente irei ter um fluxo na casa das centenas.  

    Abs e obrigado,


    Rodolfo Scotolo
    terça-feira, 29 de novembro de 2011 10:19
  •       StreamWriter valor = new StreamWriter("D:\\test.txt", true, Encoding.UTF8);
                    valor.Write(texto);
                    valor.Close();
    
                    System.IO.StreamReader reader = new System.IO.StreamReader(@"D:\\test.txt");
    
                    string line;
                    List<string> lines = new List<string>();
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (line != string.Empty)
                        {
                          lines.Add(line)  ;
                        }
                    }
    
                    reader.Close();
    
                    System.IO.StreamWriter writer = new System.IO.StreamWriter(@"D:\\test.txt");
    
    
                    foreach (string a in lines)
                    {
                        writer.Write(a + "\n");
                        
                        
                    }
                    writer.Close();
    

    Funcionou com o código acima.Só acho que dei muita volta, creio que da pra "otimizar" esse codigo.
    Obrigado,

    Rodolfo Scotolo
    terça-feira, 29 de novembro de 2011 12:07
  • Se puder marcar as respostas. Valeu

    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    terça-feira, 29 de novembro de 2011 12:12
  • Galera, quando fui subir no sistema,percebi que ele ainda esta deixando quebras de linhas.

     

    Alguma dica do que pode ser?

     

    Abs


    Rodolfo Scotolo
    sexta-feira, 2 de dezembro de 2011 12:58
  • Pra ficar mais facil, tirei um print do que ocorre.Ele ta pegando esses valores:

     

    preciso que ela fique assim:

     

    Porém não consigo remover as quebras de linhas

     

    Obrigado,


    Rodolfo Scotolo
    segunda-feira, 5 de dezembro de 2011 11:47
  • Rodolfo,

    Seria interessante abrir outra thread. Com relação ao seu problema, este conteúdo vem de um arquivo texto?

    Você quer me enviar isto?

    Meu email é pcfviana@gmail.com


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    segunda-feira, 5 de dezembro de 2011 12:27
  • Ok, Paulo vou abrir uma no thread.

    Sim, sim vem de um txt que minha propria Classe gera!

    Mas esse texto vem de um email pego no Outlook.


    Te enviei a Classe.

     

    Obrigado, 


    Rodolfo Scotolo
    segunda-feira, 5 de dezembro de 2011 12:42