我正在尝试以下列格式读取包含字符串行的文件:
"string";"string";"string";"string";"string"
我如何使用Windows和Linux兼容的功能阅读它们?
每个字符串的长度未知。
我试图像这样使用fscanf:
fscanf(fp, "\"%s\";\"%s\";\"%s\";\"%s\";\"%s\"\n");
但是第一根弦拾起了整条线。
如果你真的想使用fscanf
,你可以使用这样的格式字符串:
fscanf(fp, "\"%[^\"]\";\"%[^\"]\";\"%[^\"]\";\"%[^\"]\";\"%[^\"]\"\n", ...);
有关更多详细信息,请阅读fscanf
参考文档中的[set]转换说明符。
请注意,这不适用于字符串中嵌入的'"'
字符。
这也没有留下任何灵活性(如分号周围的额外空格,可选引号等)。
如果这些限制对您来说有问题,您将需要一个更智能的解析器(例如,libcsv可以想到)。还参考。 pmg's answer如何自己动手。
这里有一些伪代码给你
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