解析具有特定关键字匹配的文本文件

时间:2012-03-02 06:02:56

标签: c file io

我需要用C语言创建一个搜索程序,它可以解析文本文件并找到关键字x =“value”。然后我想创建一个值项目列表到数组。目前我正在使用fscanf方法,这是我的代码片段。



    fscanf(fp, "%s", buf);
    if !strcmp(buf, "x")
    {
       fscanf(fp, "%s", buf);
        if ( ! strcmp(buf, "="))
         fscanf(fp, "%s", buf);
        else
        printf("\n Not a valid format");
    }

我不想使用fscanf,还有其他方法可以满足我的要求吗?
感谢。

1 个答案:

答案 0 :(得分:1)

还有其他方法(例如,您可以使用Flex),但我认为稍微更好地使用sscanf会更有意义:

char buffer[256];
char value[128];

fgets(buffer, sizeof(buffer), fp);

if (1==sscanf(buffer, "x=%127s", value))
     // we read a value -- now use it however needed.

编辑:这里的基本想法非常简单。我们首先阅读与fgets类似的整体。然后,我们使用sscanf尝试匹配该行中的x=<whatever>。如果我们找到它,我们就有了我们关心的价值。如果我们没有找到它,sscanf将返回0,因为它返回它转换的项目数 - 如果它与我们指定的x=不匹配,它将不会转换任何内容,因此sscanf将返回0,我们知道该行不匹配。

编辑2:这是一个小型演示程序,用于从文件中读取数据,并打印出x=<whatever>形式后面的行的值,x和{之前和之后允许使用空格{1}}:

=

我用它测试了它作为输入:

#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 = %127s", value))
            printf("Value = %s\n", value);
    return 0;
}

我得到的结果是:

some junk
#a comment
a = 1 ; a couple other variables.
b = 2
x = 3
 x = 4
x=5