我想解析C程序中的文本文件。该文件包含可能的数据:
block1=
{
a="some text with space and double quota"
b=random text
c=random text
d=random text
e=random text
f="number"
g=number
}
block2=
{
a="some text with space and double quota"
b=random text
c=random text
d=random text
e=random text
f="number"
g=number
}
可能有n个块,我想创建元素列表(每个块的“a”元素),为此我该怎么办? C中的文本文件是否有任何解析API?
答案 0 :(得分:1)
我不知道C中是否有这样的API。但我认为你可以用很少的代码自己做。
创建一个结构,其中元素作为块(具有a,b,c,d,e,f,作为字符串,g作为int)。 有一个该结构的数组。并有一个字符串数组。使用fread直到文件末尾读取文件。在字符串数组中存储struct数组的每个元素的所有“a”元素之后。
如果您需要特定代码,请给我一个您描述的示例文本文件。我会写代码并为你发帖。
答案 1 :(得分:0)
#include <stdio.h>
#include <string.h>
typedef struct block {
char head[8];
char braze[2];
char a[46];
char b[18];
char c[18];
char d[18];
char e[18];
char f[15];
char g[13];
char close_braze[2];
} block;
int main () {
int i, ret;
char a_elm[10][50];
FILE *fp;
block blk[10]; //use a specific number if you know. or go for linked list
fp = fopen ("one.txt","r");
for (i = 0; i < 11; i++) {
ret = fread ((void *) &blk[i], sizeof (block), 1, fp);
if (!ret)
break;
}
fclose (fp);
for (ret = i, i = 0; i < ret; i++) {
strncpy (a_elm[i], blk[i].a, 46);
a_elm[i][46] = '\0';
printf ("%s\n", a_elm[i]);
}
return 0;
}
对于固定格式代码,可以像上面一样使用fread,或者你必须使用fscanf和一些字符串函数。