none
Problema ler linha a linha string RRS feed

  • Pergunta

  • Boa Tarde Pessoal,

    Estou com a seguinte dificuldade, preciso ler uma string linha a linha. Até consigo ler, mas preciso resolver algumas "particularidades". 

    Quando o primeiro caracter da linha é "0", quer dizer que é um novo registro, e quando se inicia em "1, 2 e 3", são características referente à aquela Nota.

    Estou tendo dificuldade ao percorrer linha a linha, "contar" quantos registros "2" ou "3" há dentro dessa Nota, ou seja, quando chegar no próximo 0, ele parar de percorrer.

    01780B102765517835125003368214150616A22240157814U0F9BD57814UGB102765                000000006193222874770D01188738000197  D1039D21-37EB-48C3-8F50-0B26F070F2CA000001
    10000004337141000000368113000000002944900000004337142000000052045700000000000000000000000000310A2011*2874770*00000000000                                      000002
    2FIAT/STRADA WORKING          02 PASSAGEIROS                                                                                                                  000003
    2004 CILINDROS - 0 KM   FAB 2016        MOD-2016                                                                                                              000004
    2             COR-PRATA BARI                                                                                                                                  000005
    2REV-TECIDO MAMBO                                                                                                                                             000006
    37ME-KIT CELEBRATION 2            210-PINTURA METALICA                                                                                                        000007
    019703308764517828021003368956150616A15303119716T0F9BD19716TG3308764TTAXI           000000002491262993730D10621458600                                         000008
    10000003493118000000324534600000000000000000000000000000000000000000000000000000000000000000310A5011*2993730*00000000000                                      000009
    2FIAT/SIENA ESSENCE 1.6.4     05 PASSAGEIROS                                                                                                                  000010
    2004 CILINDROS - 0 KM   FAB 2016        MOD-2016                                                                                                              000011
    2             COR-BRANCO BANCHISA                                                                                                                             000012
    2REV-MALHA SPACER ARCO+MALHA ALAG U                                                                                                                           000013


    segunda-feira, 11 de julho de 2016 19:21

Respostas

  • Voce pode Quebrar cada linha de sua string com uma função jogando para List<string>, uma que que seu tamanho é fixo com 164 caracteres assim

    public List<string> quebraLinha(string Texto)
    {
        List<string> ListTexto = new List<string>();
        int TamLinha = 164;
        int PosLeitura = 0;
    
        while (PosLeitura < Texto.Length)
        {
            ListTexto.Add(Texto.Substring(PosLeitura,TamLinha));
            PosLeitura += TamLinha;
        }
    
        return ListTexto;
    }

    Depois que quebrou cada linha separe seu registro de acordo com o tamanho de cada linha, podendo variar a função de acordo com o tipo de registro, segue um exemplo, estamos utilizando classes dinamicas, se tiver duvida de como funcionam visite esta postagem aqui : 

    http://www.codigoexpresso.com.br/Home/Postagem/62

    public List<object> quebraRegistro(List<string> Texto)
    {
              
        List<object> Registros = new List<object>(); 
    
        foreach(string item in Texto)
        {
            dynamic MeuRegistro = new ExpandoObject();
            MeuRegistro.Tipo = item.Substring(0, 1);
            MeuRegistro.Texto = item.Substring(1, 157);
            MeuRegistro.Registro = item.Substring(158, 6);
            Registros.Add(MeuRegistro);
        }
        return Registros;
    }

    coloque as chamadas das funções em um botão para ver como funciona

    private void button2_Click(object sender, EventArgs e)
    {
        string Texto = "01780B102765517835125003368214150616A22240157814U0F9BD57814UGB102765                000000006193222874770D01188738000197  D1039D21-37EB-48C3-8F50-0B26F070F2CA000001"+
                        "10000004337141000000368113000000002944900000004337142000000052045700000000000000000000000000310A2011*2874770*00000000000                                      000002"+
                        "2FIAT/STRADA WORKING          02 PASSAGEIROS                                                                                                                  000003"+
                        "2004 CILINDROS - 0 KM   FAB 2016        MOD-2016                                                                                                              000004"+
                        "2             COR-PRATA BARI                                                                                                                                  000005"+
                        "2REV-TECIDO MAMBO                                                                                                                                             000006"+
                        "37ME-KIT CELEBRATION 2            210-PINTURA METALICA                                                                                                        000007"+
                        "019703308764517828021003368956150616A15303119716T0F9BD19716TG3308764TTAXI           000000002491262993730D10621458600                                         000008"+
                        "10000003493118000000324534600000000000000000000000000000000000000000000000000000000000000000310A5011*2993730*00000000000                                      000009"+
                        "2FIAT/SIENA ESSENCE 1.6.4     05 PASSAGEIROS                                                                                                                  000010"+
                        "2004 CILINDROS - 0 KM   FAB 2016        MOD-2016                                                                                                              000011"+
                        "2             COR-BRANCO BANCHISA                                                                                                                             000012"+
                        "2REV-MALHA SPACER ARCO+MALHA ALAG U                                                                                                                           000013";
        List<string> ListTexto = quebraLinha(Texto);
        List<object> ListRegistros = quebraRegistro(ListTexto);
     
        foreach (dynamic item in ListRegistros)
        {
            MessageBox.Show("Tipo: " + item.Tipo + Environment.NewLine + "Linha: " + item.Texto + Environment.NewLine + "Registro: " + item.Registro);
        }
    }
    Só lembrando que quebrei seu registro em 3 , tipo, texto e o número do registro, trabalhe a função  quebre o texto em quantas partes precisar


    Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
    Visite : www.codigoexpresso.com.br

    segunda-feira, 11 de julho de 2016 22:37

Todas as Respostas

  • Yannick,

    Qual o delimitador para saber aonde termina o registro ???????


    Diego Almeida Barreto&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    segunda-feira, 11 de julho de 2016 20:21
  • Não há um delimitador final. O que há é o "0" indicando onde inicia o Registro. Quando tem uma nova linha começando com o 0, quer dizer que é um novo registro.
    segunda-feira, 11 de julho de 2016 20:28
  • Fala Yannick, tudo bem?

    int contador;
    
    string inicio = string.Empty;
    
    while((linha = strReader.ReadLine()) != null)
    
    {
    
    inicio = linha.Substring(0, 1);
    
    if(inicio = 2)
    
    {
    
    contador++;
    
    }
    
    if(inicio = 3)
    
    {
    
    contator++;
    
    }
    
    if(inicio = 0)
    
    {
    
    Console.WriteLine(contador);
    
    contador = 0;
    
    }
    }
    Acho que o ideal seria criar uma lista de string e tal, mas acho que assim já funciona. :)



    Leopoldo Augusto N. S. (Se esta resposta te ajudou de alguma forma, marque-a como útil, ok?)

    segunda-feira, 11 de julho de 2016 20:30
  • Obrigado pela disponibilidade Leopoldo, porém não seria isso. 

    Preciso contar o que está entre os 0. 

    Por exemplo: No primeiro registro há quatros "2" e um "3".

    No segundo há quatros "2" apenas.

    segunda-feira, 11 de julho de 2016 20:43
  • Voce pode Quebrar cada linha de sua string com uma função jogando para List<string>, uma que que seu tamanho é fixo com 164 caracteres assim

    public List<string> quebraLinha(string Texto)
    {
        List<string> ListTexto = new List<string>();
        int TamLinha = 164;
        int PosLeitura = 0;
    
        while (PosLeitura < Texto.Length)
        {
            ListTexto.Add(Texto.Substring(PosLeitura,TamLinha));
            PosLeitura += TamLinha;
        }
    
        return ListTexto;
    }

    Depois que quebrou cada linha separe seu registro de acordo com o tamanho de cada linha, podendo variar a função de acordo com o tipo de registro, segue um exemplo, estamos utilizando classes dinamicas, se tiver duvida de como funcionam visite esta postagem aqui : 

    http://www.codigoexpresso.com.br/Home/Postagem/62

    public List<object> quebraRegistro(List<string> Texto)
    {
              
        List<object> Registros = new List<object>(); 
    
        foreach(string item in Texto)
        {
            dynamic MeuRegistro = new ExpandoObject();
            MeuRegistro.Tipo = item.Substring(0, 1);
            MeuRegistro.Texto = item.Substring(1, 157);
            MeuRegistro.Registro = item.Substring(158, 6);
            Registros.Add(MeuRegistro);
        }
        return Registros;
    }

    coloque as chamadas das funções em um botão para ver como funciona

    private void button2_Click(object sender, EventArgs e)
    {
        string Texto = "01780B102765517835125003368214150616A22240157814U0F9BD57814UGB102765                000000006193222874770D01188738000197  D1039D21-37EB-48C3-8F50-0B26F070F2CA000001"+
                        "10000004337141000000368113000000002944900000004337142000000052045700000000000000000000000000310A2011*2874770*00000000000                                      000002"+
                        "2FIAT/STRADA WORKING          02 PASSAGEIROS                                                                                                                  000003"+
                        "2004 CILINDROS - 0 KM   FAB 2016        MOD-2016                                                                                                              000004"+
                        "2             COR-PRATA BARI                                                                                                                                  000005"+
                        "2REV-TECIDO MAMBO                                                                                                                                             000006"+
                        "37ME-KIT CELEBRATION 2            210-PINTURA METALICA                                                                                                        000007"+
                        "019703308764517828021003368956150616A15303119716T0F9BD19716TG3308764TTAXI           000000002491262993730D10621458600                                         000008"+
                        "10000003493118000000324534600000000000000000000000000000000000000000000000000000000000000000310A5011*2993730*00000000000                                      000009"+
                        "2FIAT/SIENA ESSENCE 1.6.4     05 PASSAGEIROS                                                                                                                  000010"+
                        "2004 CILINDROS - 0 KM   FAB 2016        MOD-2016                                                                                                              000011"+
                        "2             COR-BRANCO BANCHISA                                                                                                                             000012"+
                        "2REV-MALHA SPACER ARCO+MALHA ALAG U                                                                                                                           000013";
        List<string> ListTexto = quebraLinha(Texto);
        List<object> ListRegistros = quebraRegistro(ListTexto);
     
        foreach (dynamic item in ListRegistros)
        {
            MessageBox.Show("Tipo: " + item.Tipo + Environment.NewLine + "Linha: " + item.Texto + Environment.NewLine + "Registro: " + item.Registro);
        }
    }
    Só lembrando que quebrei seu registro em 3 , tipo, texto e o número do registro, trabalhe a função  quebre o texto em quantas partes precisar


    Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
    Visite : www.codigoexpresso.com.br

    segunda-feira, 11 de julho de 2016 22:37