Ich habe ein kindof kompliziertes Dateiformat:Lese kompliziert Formatstring mit fscanf
{
"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
},
Diese Art der Liste geht weiter, für Hunderte von Einträgen. Ich möchte in den variablen Zahlen und eine Zeichenfolge (DOCNUM, Form, id, Nachbarn, Rang, score) so habe ich eine Format-String für diese Art der Eingabe lesen:
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++;
}
}
Es sieht kompliziert aus, aber es scheint zu funktionieren, weil ich die erste Instanz richtig verstanden habe. Die Ausgabe lautet:
>>node:"avoir",,ID=0
jedoch Ausgang an das hält, auch wenn das Format genau in der Datei wiederholt (wie Sie in der Probe sehen). Fehle ich etwas Wichtiges hier? Gibt es eine einfachere Möglichkeit, solche Daten aus einer solchen Datei einzulesen?
Das JSON ist. Besorgen Sie sich Ihre Lieblings-json-Bibliothek und nutzen Sie diese. – Leandros
Das sieht wie ein [JSON] (https://en.wikipedia.org/wiki/JSON) -Objekt aus, und das kann nicht wirklich einfach mit 'scanf' und Familie parsen. Suchen Sie stattdessen nach einer JSON-Bibliothek. –
"Es scheint zu funktionieren, weil ich die erste Instanz richtig verstanden habe" - Berühmte letzte Worte eines Softwareentwicklers, der nicht richtig getestet hat. – Olaf