我需要用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,还有其他方法可以满足我的要求吗?
感谢。
答案 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