我正在尝试读取包含以下格式的字符串行的文件:
"string";"string";"string";"string";"string"
如何使用Windows和linux上兼容的功能读取它们?
每个字符串的长度未知。
我试图像这样使用fscanf:
fscanf(fp, "\"%s\";\"%s\";\"%s\";\"%s\";\"%s\"\n");
但是第一个字符串占据了整行。
答案 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