读特定格式的字符串

问题描述 投票:0回答:2

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

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

我如何使用Windows和Linux兼容的功能阅读它们?

每个字符串的长度未知。

我试图像这样使用fscanf:

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

但是第一根弦拾起了整条线。

c linux string windows scanf
2个回答
3
投票

如果你真的想使用fscanf,你可以使用这样的格式字符串:

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

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

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

这也没有留下任何灵活性(如分号周围的额外空格,可选引号等)。

如果这些限制对您来说有问题,您将需要一个更智能的解析器(例如,libcsv可以想到)。还参考。 pmg's answer如何自己动手。


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
© www.soinside.com 2019 - 2024. All rights reserved.