我的文件格式如下:
abc dca
2
aa bb
casca casss
abc dca
3
aa bb
casca casss
casca casss
abcd abcd
0
基本上它是通过块(在前面的例子中将有3个块)。一个特定的块将是:
abc dca
2
aa bb
casca casss
在所有情况下,我们都会:
第一行:总是用空格分隔两个单词。
第二行:一个数字
从这里开始,我们将拥有与前一个数字一样多的行,并且每行总是有两个单词。
如何解析一个文件,以便对于每个块,我可以调用一个函数,传递一些我用块中找到的东西计算的东西?
答案 0 :(得分:1)
使用最小状态机:
#include <stdio.h>
#include <string.h>
int main(int qrgc, char **argv)
{
char buff[111];
char one[10], two[10];
char left[10], right[10];
int num;
size_t len;
int state,rc;
state =0;
while(fgets (buff, sizeof buff, stdin)) {
len = strlen (buff);
while (len && buff[len-1] == '\n') buff[--len] = 0;
switch (state) {
case 0:
rc = sscanf(buff, "%s %s", left, right);
if (rc < 2) goto quit;
state=1;
break;
case 1:
rc = sscanf(buff, "%d", &num);
if (rc < 1) goto quit;
state=2;
break;
default:
if (!len) {state = 0; continue; }
rc = sscanf(buff, "%s %s", one, two);
if (rc < 2) goto quit;
break;
}
}
quit: ;
return 0;
}
答案 1 :(得分:0)
有很多方法可以做到这一点。我想到的两个是:
如果文件不是很大,那么你可以将它全部读入一个字符串列表(每行一个字符串)。
另一种方法是传递一个带有文件句柄和前一个块的函数。
(我不想在C中编写动态数组)