还有其它的方法(例如,你可以使用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
感谢您的快速回复,请您详细描述您的答案? – Nimit 2012-03-02 06:13:28
很好。但是,将文件数据存储到缓冲区是否好?你能给我提供以上的例子与文件操作?非常感谢。 – Nimit 2012-03-02 06:22:22
我建议在格式字符串的'='周围留出空格,如下所示:'“x =%127s”'。这将允许用户在文件中的'='周围留出空间。 – 2012-03-02 06:22:54