Я хочу проанализировать файл с разделителями табуляции с помощью Boost.Spirit (Qi). Мой файл выглядит примерно так:
John Doe\tAge 23\tMember
Jane Doe\tAge 25\tMember
...
Можно ли разобрать это с пропустить парсер? У меня сейчас проблема в том, что boost::spirit::ascii:space
также пропускает пробелы в имени человека. Как бы phrase_parse(...)
Звонок похож?
Я также использую кортежи Boost.Fusion для удобного хранения результатов в структуре:
struct Person
{
string name;
int age;
string status;
};
Это похоже на работу для name
:
String %= lexeme[+(char_-'\t')];
Он соответствует всему символу, который не является вкладкой. Затем он используется как часть большего правила:
Start %= Name >> Age >> Status;
Q. Можно ли разобрать это с помощью пропуска парсера?
О. Нет, невозможно проанализировать что-либо с помощью синтаксического анализатора пропуска. Шкиперы добиваются противоположного: они игнорируют определенную вводную информацию.
Тем не менее, то, что вы, кажется, ищете что-то вроде этого взлома: (Я не рекомендую это)
Теперь вы можете посмотреть на мои другие ответы для правильных способов анализа CSV / TSV, имеющих дело со встроенным пробелом, заключенными в кавычки значениями, экранированными кавычками и т. Д. (Я полагаю, что один даже показывает символы продолжения строки)