读取特定格式的字符串

时间:2019-02-13 12:04:13

标签: c linux string windows scanf

我正在尝试读取包含以下格式的字符串行的文件:

"string";"string";"string";"string";"string"

如何使用Windows和linux上兼容的功能读取它们?

每个字符串的长度未知。

我试图像这样使用fscanf:

fscanf(fp, "\"%s\";\"%s\";\"%s\";\"%s\";\"%s\"\n");

但是第一个字符串占据了整行。

2 个答案:

答案 0 :(得分:3)

如果您确实要使用fscanf,则可以使用如下格式的字符串:

fscanf(fp, "\"%[^\"]\";\"%[^\"]\";\"%[^\"]\";\"%[^\"]\";\"%[^\"]\"\n", ...);

有关更多详细信息,请阅读参考文档中fscanf [set] 转换说明符。

请注意,这不适用于字符串中嵌入的'"'字符。

这也没有任何灵活性(例如,分号周围的空白,可选的引号等)。

万一这些限制对您造成问题,您将需要一个更智能的解析器(例如libcsv)。另请参阅。 pmg's answer,了解如何进行自我滚动。

答案 1 :(得分:2)

这是给你的一些伪代码

loop
    getchar; if not a quote exit with error
    loop
        getchar; mind EOF
        if not a quote, add to string
        if a quote exit inner loop
    use string
    getchar; if not semicolon exit with error unless EOF