none
Pegar parte especifica de uma string RRS feed

  • Pergunta

  • Bom dia!!

    No programa que estou fazendo eu armazeno numa string uma série de informações, elas chegam via cmd. Mas eu não preciso de todos esses dados ou todas essas informações que estou recebendo, na verdade eu preciso apenas das ultimas linhas.

    Ex:

    send_results
    {
            "cpu_util_total":       22.9936,
            "cpu_util_user":        2.31121,
            "cpu_util_system":      20.6824,
            "sender_has_retransmits":       0,
            "streams":      [{
                            "id":   1,
                            "bytes":        2011693056,
                            "retransmits":  -1,
                            "jitter":       0,
                            "errors":       0,
                            "packets":      0
                    }]
    }
    get_results
    {
            "cpu_util_total":       47.8454,
            "cpu_util_user":        12.176,
            "cpu_util_system":      35.6694,
            "sender_has_retransmits":       -1,
            "streams":      [{
                            "id":   1,
                            "bytes":        2011690464,
                            "retransmits":  -1,
                            "jitter":       0,
                            "errors":       0,
                            "packets":      0
                    }]
    }
    [  4]  19.00-20.00  sec  91.8 MBytes   771 Mbits/sec
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bandwidth
    [  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  sender
    [  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  receiver

    iperf Done.

    No momento tudo isso esta numa string e estou mostrando na tela através de uma richtextbox. As informações que estão em destacadas em negritos são as únicas que me interessam e as unicas que eu preciso armazenar.

    quarta-feira, 9 de agosto de 2017 13:55

Respostas

  • Certo!

    Eu não sei exatamente como você pode separar elas, você iria precisar de um coringa, ou um layout correto sobre esse retorno.

    Tipo assim, Id posição 0 até a posição 4, Interval, posição 4 até a posição X, e assim por diante.

    Eu fiz um exemplo aqui, retornando as duas últimas linhas que você quer, na verdade, ele retorna da string [ ID], até encontrar a string "iperf Done."

    Segue abaixo o exemplo:

    string pStringLeitura = "";
                pStringLeitura = "send_results";
                pStringLeitura += "\n{";
                pStringLeitura += "\n        'cpu_util_total':       22.9936,";
                pStringLeitura += "\n        'cpu_util_user':        2.31121,";
                pStringLeitura += "\n        'cpu_util_system':      20.6824,";
                pStringLeitura += "\n        'sender_has_retransmits':       0,";
                pStringLeitura += "\n        'streams':      [{";
                pStringLeitura += "\n                        'id':   1,";
                pStringLeitura += "\n                        'bytes':        2011693056,";
                pStringLeitura += "\n                        'retransmits':  -1,";
                pStringLeitura += "\n                        'jitter':       0,";
                pStringLeitura += "\n                        'errors':       0,";
                pStringLeitura += "\n                        'packets':      0";
                pStringLeitura += "\n                }]";
                pStringLeitura += "\n}";
                pStringLeitura += "\nget_results";
                pStringLeitura += "\n{";
                pStringLeitura += "\n        'cpu_util_total':       47.8454,";
                pStringLeitura += "\n        'cpu_util_user':        12.176,";
                pStringLeitura += "\n        'cpu_util_system':      35.6694,";
                pStringLeitura += "\n        'sender_has_retransmits':       -1,";
                pStringLeitura += "\n        'streams':      [{";
                pStringLeitura += "\n                        'id':   1,";
                pStringLeitura += "\n                        'bytes':        2011690464,";
                pStringLeitura += "\n                        'retransmits':  -1,";
                pStringLeitura += "\n                        'jitter':       0,";
                pStringLeitura += "\n                        'errors':       0,";
                pStringLeitura += "\n                        'packets':      0";
                pStringLeitura += "\n                }]";
                pStringLeitura += "\n}";
                pStringLeitura += "\n[  4]  19.00-20.00  sec  91.8 MBytes   771 Mbits/sec";
                pStringLeitura += "\n- - - - - - - - - - - - - - - - - - - - - - - - -";
                pStringLeitura += "\n[ ID] Interval           Transfer     Bandwidth";
                pStringLeitura += "\n[  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  sender";
                pStringLeitura += "\n[  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  receiver";
                pStringLeitura += "\niperf Done.";
    
                int posIni = pStringLeitura.IndexOf("[ ID]");
                int posFim = pStringLeitura.IndexOf("iperf Done.");
                string ret = string.Empty;
    
                if (posIni != -1)
                    ret = pStringLeitura.Substring(posIni, posFim - posIni);

    Resultado:

    Qualquer dúvida, estou a disposição.

    att.

    Felipe

    quinta-feira, 10 de agosto de 2017 17:13

Todas as Respostas

  • Michel, bom dia!

    Você sempre vai precisar somente das duas últimas linhas? Ou podem vir mais que duas linhas?

    Outra coisa, você precisa da string do jeito que ela está, ou separada?

    Do jeito que ela está, seria assim:

    string ret1 = "[  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  sender"
    
    string ret2 = "[  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  receiver"

    Separada, seria algo do tipo, assim:

    int pId = 4;
    string pInterval = "0.00-20.00 sec";
    string pTransfer = "1.87 GBytes";
    string pBandwidth = "805 Mbits/sec";
    string pWho = "sender";

    Assim que me der um retorno, quanto à isso, posso tentar te ajudar.

    att.

    Felipe

    quarta-feira, 9 de agosto de 2017 14:16
  • Bom dia Felipe, a intenção é deixar ela separadinha.

    obrigado

    quinta-feira, 10 de agosto de 2017 12:37
  • Certo!

    Eu não sei exatamente como você pode separar elas, você iria precisar de um coringa, ou um layout correto sobre esse retorno.

    Tipo assim, Id posição 0 até a posição 4, Interval, posição 4 até a posição X, e assim por diante.

    Eu fiz um exemplo aqui, retornando as duas últimas linhas que você quer, na verdade, ele retorna da string [ ID], até encontrar a string "iperf Done."

    Segue abaixo o exemplo:

    string pStringLeitura = "";
                pStringLeitura = "send_results";
                pStringLeitura += "\n{";
                pStringLeitura += "\n        'cpu_util_total':       22.9936,";
                pStringLeitura += "\n        'cpu_util_user':        2.31121,";
                pStringLeitura += "\n        'cpu_util_system':      20.6824,";
                pStringLeitura += "\n        'sender_has_retransmits':       0,";
                pStringLeitura += "\n        'streams':      [{";
                pStringLeitura += "\n                        'id':   1,";
                pStringLeitura += "\n                        'bytes':        2011693056,";
                pStringLeitura += "\n                        'retransmits':  -1,";
                pStringLeitura += "\n                        'jitter':       0,";
                pStringLeitura += "\n                        'errors':       0,";
                pStringLeitura += "\n                        'packets':      0";
                pStringLeitura += "\n                }]";
                pStringLeitura += "\n}";
                pStringLeitura += "\nget_results";
                pStringLeitura += "\n{";
                pStringLeitura += "\n        'cpu_util_total':       47.8454,";
                pStringLeitura += "\n        'cpu_util_user':        12.176,";
                pStringLeitura += "\n        'cpu_util_system':      35.6694,";
                pStringLeitura += "\n        'sender_has_retransmits':       -1,";
                pStringLeitura += "\n        'streams':      [{";
                pStringLeitura += "\n                        'id':   1,";
                pStringLeitura += "\n                        'bytes':        2011690464,";
                pStringLeitura += "\n                        'retransmits':  -1,";
                pStringLeitura += "\n                        'jitter':       0,";
                pStringLeitura += "\n                        'errors':       0,";
                pStringLeitura += "\n                        'packets':      0";
                pStringLeitura += "\n                }]";
                pStringLeitura += "\n}";
                pStringLeitura += "\n[  4]  19.00-20.00  sec  91.8 MBytes   771 Mbits/sec";
                pStringLeitura += "\n- - - - - - - - - - - - - - - - - - - - - - - - -";
                pStringLeitura += "\n[ ID] Interval           Transfer     Bandwidth";
                pStringLeitura += "\n[  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  sender";
                pStringLeitura += "\n[  4]   0.00-20.00  sec  1.87 GBytes   805 Mbits/sec                  receiver";
                pStringLeitura += "\niperf Done.";
    
                int posIni = pStringLeitura.IndexOf("[ ID]");
                int posFim = pStringLeitura.IndexOf("iperf Done.");
                string ret = string.Empty;
    
                if (posIni != -1)
                    ret = pStringLeitura.Substring(posIni, posFim - posIni);

    Resultado:

    Qualquer dúvida, estou a disposição.

    att.

    Felipe

    quinta-feira, 10 de agosto de 2017 17:13
  • Bom dia,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 14 de agosto de 2017 13:18
    Moderador