C: 在不丢失空白的情况下进行文件分析



我正在通过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

等等。

相关内容

  • 没有找到相关文章

最新更新