检查文件格式正确性的最佳方法

时间:2013-12-10 02:49:18

标签: c++ file format

如果您有文件格式:

<int><space><int><space><char><space><char*><space><float><newline>

<int><space><int><space><char><space><char*><space><float><newline>

<int><space><int><space><char><space><char*><space><float><newline>

所以例如文件可以是:

12 2212 A test1ok 12.0
11 2442 B something 32.555
17 223 D sometime1test 12.0

现在,给定一些文件,您如何检查它确实符合该格式?

如果不使用除Boost之外的外部库,您将如何做到这一点?

3 个答案:

答案 0 :(得分:1)

如果您不想要提升,可以使用c ++ 11标准库中的<regex>。您可以查看here以获取regex的详细信息。

答案 1 :(得分:1)

如果char*部分不包含空格,您可以尝试使用sscanf并查看它是否匹配。类似的东西:

#include <stdio.h>

int main()
{
    unsigned dummy1, dummy2;
    char dummy3;
    char dummy4[256];
    float dummy5;

    const char *str = "12 2212 A test1ok 12.0\n";
    if ( sscanf( str, "%u %u %c %s %f\n", &dummy1, &dummy2, &dummy3, dummy4, &dummy5 ) > 0 ) {
        // Matches
    } else {
        // Doesn't match
    }
}

答案 2 :(得分:0)

如果使用正则表达式(C ++ 11或外部库,例如re2)由于某种原因(性能,缺少C ++ 11,无法构建lib,公司策略) deps,...)你可以尝试lexer生成器,如lex / flex或re2C 或者为什么不Ragel,这是为验证目的专门制作的。

这样的生成器将获取一个输入,描述您期望看到的内容以及在看到某些内容时您想要发生什么,并将其转换为源代码(例如C或C ++)而没有编译为有限的外部依赖项将解析和验证格式的状态机。