2012-03-02 61 views
1

我需要用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

还有其它的方法(例如,你可以使用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后容许空间和=

#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 

我得到的结果是:

Value = 3 
Value = 4 
Value = 5 
+0

感谢您的快速回复,请您详细描述您的答案? – Nimit 2012-03-02 06:13:28

+0

很好。但是,将文件数据存储到缓冲区是否好?你能给我提供以上的例子与文件操作?非常感谢。 – Nimit 2012-03-02 06:22:22

+1

我建议在格式字符串的'='周围留出空格,如下所示:'“x =%127s”'。这将允许用户在文件中的'='周围留出空间。 – 2012-03-02 06:22:54

相关问题