Usuário com melhor resposta
Pegar parte especifica de uma string

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.
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
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 14 de agosto de 2017 13:18
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
-
-
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
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 14 de agosto de 2017 13:18
-
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.