Разобрать файл с разделителями табуляции с Boost.Spirit, где записи могут содержать пробелы в

Я хочу проанализировать файл с разделителями табуляции с помощью 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;

0

Решение

Q. Можно ли разобрать это с помощью пропуска парсера?

О. Нет, невозможно проанализировать что-либо с помощью синтаксического анализатора пропуска. Шкиперы добиваются противоположного: они игнорируют определенную вводную информацию.

Тем не менее, то, что вы, кажется, ищете что-то вроде этого взлома: (Я не рекомендую это)

Теперь вы можете посмотреть на мои другие ответы для правильных способов анализа CSV / TSV, имеющих дело со встроенным пробелом, заключенными в кавычки значениями, экранированными кавычками и т. Д. (Я полагаю, что один даже показывает символы продолжения строки)

0

Другие решения


По вопросам рекламы [email protected]