通过C ++从stdout中的某些打印数据中提取特定值

时间:2013-11-28 09:38:17

标签: c++ regex

我在Linux中使用基于C ++的模拟器(ndnSIM)。执行某些任务后,它会通过此命令在stdout中每秒打印一个输出:

L3RateTracer::InstallAll ("-", Seconds (1));。这是常量,我无法更改其格式以在字符串或数组中打印输出。我想从stdout的此输出中提取特定数据。例如,第1秒的输出已打印在stdout中,如下所示(每个要素之间的空格按Tab键):

1   C1  0   1   Out1    268 335 0
1   C1  0   2   Out2    0   0   0
1   C2  1   1   Out1    0   0   0
1   R3  1   1   Out2    317 0   0
1   P1  -1  all Sat1    268 0   335
1   C1  -1  all Tim1    0   0   0
1   R2  1   9   Out1    0   0   0

我需要为第二列中的“R3”和第5列中的“Out2”输出提取第6列数据。在此示例中,所需的值为“317”。

如何通过C ++从stdout的打印输出中每秒提取此值(= 317)?

2 个答案:

答案 0 :(得分:1)

如果您不需要,您不想使用正则表达式或其他任何内容。

你需要做的是读取文件,用标签和/或空格拆分,我无法分辨,然后检索你想要的元素。

了解如何在此处拆分字符串: Split a string in C++?

stdin读取,这就是你想要做的事情,你需要这样做:

std::string line;
std::getline(std::cin, line);

当与上面的字符串拆分方法结合使用时,它会非常有效。 然后,您就可以ToolThatPrintsThings | YourNewTool

答案 1 :(得分:0)

使用awk

ndnSIM | awk '{print $6}' | yourProg

现在yourProg只需要使用cin::getline()读取每一行,该行将是ndnSIM输出的第6列。