Извлечение определенного значения из некоторых печатных данных в стандартный вывод C ++

0

Я использую симулятор (ndnSIM) в Linux, который основан на C++. Выполняя некоторые задачи, он печатает выходные данные в каждой секунде в 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" в 2-м столбце и "Out2" в 5-м столбце. В этом примере желаемое значение равно "317".

Как я могу извлечь это значение (= 317) каждую секунду из печатного выхода в stdout C++?

  • 0
    Вы должны сделать это в C++ ? Почему бы сначала не пропустить это через awk ?
  • 0
    Да, мне нужно выполнить в C++ . я не знаком с awk .
Показать ещё 4 комментария
Теги:

2 ответа

1
Лучший ответ

Вы не хотите использовать регулярное выражение для этого или что-нибудь еще, если вам это не нужно.

То, что вам нужно сделать, - это прочитать в файле, разделить его на вкладки и/или пробелы, я не могу сказать, а затем извлечь нужный элемент.

Читайте о том, как разбить строки здесь: Разделить строку в C++?

для чтения из stdin, который, как вам кажется, вы хотите сделать, вам нужно сделать это:

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

В сочетании со способом разделения строк выше, он будет работать чудесно. Затем вы сможете использовать ToolThatPrintsThings | YourNewTool ToolThatPrintsThings | YourNewTool

  • 0
    Кажется, хорошо. Что это значит под ToolThatPrintsThings | YourNewTool
  • 0
    std::getline(std::cin, line) ожидает ввода моих данных в командной строке. Но мне нужно собирать данные из автоматически генерируемых данных в stdout , а не ждать ввода данных человеком.
0

Использовать awk:

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

Теперь yourProg просто должен прочитать каждую строку cin::getline(), которая будет столбцом 6 из вывода ndnSIM.

  • 0
    Я должен использовать предложенное вами решение в командной строке? такой как этот: ./waf --run=MyProg | awk '{print $6}' | cin::getline() ? Но я думаю, что я неправильно понял! Первый канал - команда запуска симулятора ndnSIM.
  • 0
    cin::getline() - это то, что вы пишете в своей программе на C ++, чтобы прочитать строку из стандартного ввода. Это не команда оболочки.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню