C:文件解析而不会丢失空格

时间:2012-03-21 04:59:34

标签: c file-io fileparsing

我正在通过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的整个值而不会占用空间。

请为我建议解决方案。

感谢。

2 个答案:

答案 0 :(得分:2)

在你的代码的这一行:

if (1 == sscanf(buffer, " x = %s", value))

%s意味着用一个词来读。

如果您想阅读本行的其余部分,请使用%[^\n]s,如下所示:

if (1 == sscanf(buffer, " x = %[^\n]s", value))

答案 1 :(得分:0)

要做的第一件事就是退出ssc​​anf。如果你阅读了手册页,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

等等。