【问题标题】:Parse tab delimited file with Boost.Spirit where entries may contain whitespace in使用 Boost.Spirit 解析制表符分隔的文件,其中条目可能包含空格
【发布时间】:2015-07-21 10:07:17
【问题描述】:

我想使用 Boost.Spirit (Qi) 解析制表符分隔的文件。我的文件看起来像这样:

John Doe\tAge 23\tMember
Jane Doe\tAge 25\tMember
...

是否可以使用 skip parser 对其进行解析?我现在遇到的问题是,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;  

【问题讨论】:

    标签: c++ parsing boost boost-spirit csv


    【解决方案1】:

    问。是否可以使用跳过解析器来解析它?

    A.不,使用跳过解析器无法解析任何内容。船长实现了相反的效果:他们忽略了某些输入信息。

    但是,您似乎正在寻找类似这种 hack 的东西:(我不推荐它)

    现在,您可以查看我的其他答案,了解解析 CSV/TSV 处理嵌入空格、引用值、转义引号等的正确方法。(我相信甚至会显示行继续字符)

    【讨论】:

    • 非常感谢您的回答!到目前为止,我的理解是,我需要一个忽略制表符和换行符的跳过解析器。这将只留下我感兴趣的部分,这些部分可以通过规则进行解析。是否有船长已经这样做了,还是我需要自己动手?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多