我正在通过C程序解析特定关键字匹配的文件, 这是我的示例代码......
#include <stdio.h>
int main() {
FILE *infile = fopen("Somefile.txt", "r");
char buffer[256];
char value[128];
while (fgets(buffer, sizeof(buffer), infile))
if (1 == sscanf(buffer, " x = %s", value))
printf("Value = %s\n", value);
return 0;
}
Somefile.txt
some junk
#a comment
a = 1 ; a couple other variables.
b = 2
x = 3
x = 4
x=5
x = Hi hello
输出:
Value = 3
Value = 4
Value = 5
Value = Hi
问题:当x包含类似“Hi Hello”的值时,它只是解析“Hi”,我想解析x的整个值而不会占用空间。
请为我建议解决方案。
感谢。
答案 0 :(得分:2)
在你的代码的这一行:
if (1 == sscanf(buffer, " x = %s", value))
%s
意味着用一个词来读。
如果您想阅读本行的其余部分,请使用%[^\n]s
,如下所示:
if (1 == sscanf(buffer, " x = %[^\n]s", value))
答案 1 :(得分:0)
要做的第一件事就是退出sscanf。如果你阅读了手册页,scanf将空格视为规范,说“你这里有一些空格,这并不重要。”然后其他字符是文字的规范。效果是格式规范类似于“任意数量的空间,然后是x,然后是更多的空白,然后是'=',然后是更多的空白,然后是字符串,现在返回字符串。”
你真正想要做的是一些轻量级的解析。您可能会更好地阅读每一行并使用简单的有限状态机扫描它,即
while not end of file
while not end of line
get next character
if char == ";" -- comment
break
if char is a letter
parse an assignment
等等。