我正在通过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 = %sn", 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包含像"嗨你好"这样的值时,它只解析"嗨",我想解析x的整个值而不丢失空间。
请给我推荐解决方案。
谢谢。
在代码的这一行中:
if (1 == sscanf(buffer, " x = %s", value))
CCD_ 1表示读入一个单词。
如果你想阅读这行的其余部分,可以像这样使用%[^n]s
:
if (1 == sscanf(buffer, " x = %[^n]s", value))
首先要做的是退出sscanf。如果您阅读手册页,scanf会将空格视为"此处有一些空白,这并不重要"的规范。然后其他字符则是文字的规范。其效果是,格式规范类似于"任意数量的while空格,然后是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
等等。