我有一种复杂的文件格式:
{
"color": [
45,
200,
34
],
"docnum": 5183,
"form": "avoir",
"graph": "jdm.N.flat",
"id": 0,
"lang": "fr",
"neighbors": 17,
"pos": "N",
"pzero": true,
"rank": 1,
"score": 0.0028284271,
"type": 1
},
{
"color": [
45,
200,
34
],
"docnum": 22809,
"form": "argent",
"graph": "jdm.N.flat",
"id": 1,
"lang": "fr",
"neighbors": 65,
"pos": "N",
"pzero": false,
"rank": 2,
"score": 0.0028284271,
"type": 1
},
这样的列表不胜枚举,有数百个条目。我想读取变量数字和字符串(docnum、form、id、neighbors、rank、score),因此我为此类输入创建了一个格式字符串:
main(){
FILE* in=fopen("fr.N.bien2","r");
int maxwords=100;
int maxstringlen=100;
char* nodes=malloc(sizeof(char)*maxstringlen*maxwords);
if(!nodes){printf("Nodes couldn't be allocated!\n");}
int i=0;
int* IDs=malloc(sizeof(int)*3*maxwords);
int docnum,nei,rank;
float score;
char* pzero;
while(fscanf(in," { \"color\": [ 45, 200, 34 ], \"docnum\": %i, \"form\": %s \"graph\": \"jdm.N.flat\", \"id\": %i , \"lang\": \"fr\", \"neighbors\": %i , \"pos\": \"N\", \"pzero\": false, \"rank\": %i , \"score\": %f , \"type\" :1 },",&docnum,&nodes[i],&IDs[i],&nei,pzero,&rank,&score))
{
printf("node:%s,ID=%i\n",&nodes[i],IDs[i]);
i++;
}
}
它看起来很复杂,但似乎很有效,因为我的第一个实例是正确的。输出为:
>>node:"avoir",,ID=0
但是,即使格式在文件中完全重复(如示例中所示),输出也会停止。 我在这里错过了一些重要的事情吗? 有没有更简单的方法从这样的文件中读取此类数据?
最佳答案
关于c - 使用 fscanf 读取复杂格式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36531619/