У меня есть выходные данные другой программы, которая больше предназначена для чтения человеком, чем для чтения машиной, но все равно собираюсь ее проанализировать. Ничего сложного.
Тем не менее, мне интересно, как лучше всего это сделать на C ++. Это больше вопрос типа «общая практика».
Я заглянул в Boost.Spirit и даже немного поработал. Эта вещь сумасшедшая! Если бы I разрабатывал язык, который я читал, это могло бы быть правильным инструментом для работы. Но так как это, учитывая крайнее время компиляции, несколько страниц ошибок из g ++, когда я делаю что-то не так, это просто не то, что мне нужно. (У меня нет особой необходимости в производительности во время выполнения.)
Думая об использовании оператора C ++ <<, но это кажется бесполезным. Если в моем файле есть такие строки, как «Джон имеет 5 виджетов» и другие «Мэри работает на улице Рэмси, 459», как я могу убедиться, что в моей программе есть строка первого типа, а не второго? Я должен прочитать всю строку, а затем использовать такие вещи, как <code>string::find и string::substr
Я думаю.
И это оставляет sscanf
. Было бы прекрасно справиться с вышеуказанными случаями
if( sscanf( str, "%s has %d widgets", chararr, & intvar ) == 2 )
// then I know I matched "foo has bar" type of string,
// and I now have the parameters too
Так что мне просто интересно, что я что-то упустил или C ++ действительно не имеет много встроенных альтернатив.