#include<stdio.h>
#include<string.h>
#include<ctype.h>
const int KEYLEN = 1025;
const int VALLEN = 1025;
const int OB1_PAIR_CNT = 1000;
int main(){
FILE* f_in = fopen("convertor.in","r");
FILE* f_out = fopen("convertor.out","w");
char OB1_Val_Buf[OB1_PAIR_CNT][VALLEN];
char Val_Buf[VALLEN];
char Index_Buf[KEYLEN];
unsigned c;
int i,j;
/**
* Primul obiect
* Scot numele coloanelor &
* Valorile corespunzatoare
**/
fscanf(f_in," [ { ");
i=0;
while( (c=getc(f_in)) != '}'){
ungetc(c,f_in); //nu ma bag, man
//index
if( (c=getc(f_in)) != '\"'){
//numar
ungetc(c,f_in);
fscanf(f_in," %[^:]",Index_Buf);
getc(f_in); //:
fscanf(f_in," ");
}
else{
//string
fscanf(f_in," %[^\"]",Index_Buf);
getc(f_in); // "
fscanf(f_in," ");
getc(f_in); // :
fscanf(f_in," ");
}
fprintf(f_out,"%s,",Index_Buf);
//val
c = getc(f_in);
if( c != '\"'){
//numar
while(c>'z') c = getc(f_in); //ciudat; uneori pune in c 223U; FIXME
ungetc(c,f_in);
fscanf(f_in," %[^},]",OB1_Val_Buf[i]);
fscanf(f_in," ");
c = getc(f_in);
if( c != ','){ // posibil }
for(int j=0;OB1_Val_Buf[i][j]!='\0';j++)
if(OB1_Val_Buf[i][j] == '\n')
OB1_Val_Buf[i][j] = '\0';
ungetc(c,f_in);
break;
}
fscanf(f_in," ");
}
else{
//string
fscanf(f_in," %[^\"] ",OB1_Val_Buf[i]);
getc(f_in); //"
fscanf(f_in," ");
c = getc(f_in);
if( c !=',') { //posibil }
ungetc(c,f_in);
break;
}
fscanf(f_in," ");
}
i++;
}
fprintf(f_out,"\n");
//scriu si valorile din primul obiect
for(j=0;j<=i;j++)
fprintf(f_out,"%s,",OB1_Val_Buf[j]);
fprintf(f_out,"\n");
/*****
* Restul obiectelor; Ignor cheia
*****/
i=0;
fscanf(f_in," ");
/// Intru OK
while( (c=getc(f_in)) != ']'){ //, sau ]
fscanf(f_in," ");
getc(f_in); // {
fscanf(f_in, " ");
c=getc(f_in);
while( c != '}'){
ungetc(c,f_in);
//index;ignor
fscanf(f_in, " %[^:] ",Index_Buf);
getc(f_in); //:
fscanf(f_in," ");
//Val
for(c=getc(f_in); !isdigit(c) && c!='\"' ; c=getc(f_in));
if( c != '\"'){
//nr
while(c > 'z') c = getc(f_in);// ciuat; uneori pune in c 223U (-30 printat ca int din tip char); EOF/overflow?FIXME
ungetc(c,f_in);
fscanf(f_in," %[^,}]",Val_Buf);
fscanf(f_in," ");
c=getc(f_in);
if(c!=','){ //}
for(i=0;Val_Buf[i]!='\0';i++) //citeste si \n inainte de }
if(Val_Buf[i] == '\n')
Val_Buf[i]='\0';
ungetc(c,f_in);
fprintf(f_out,"%s,\n",Val_Buf);
break;
}
}
else{
//str
fscanf(f_in," ");
fscanf(f_in," %[^\"]",Val_Buf);
c = getc(f_in); //"
fscanf(f_in," ");
c=getc(f_in);
if(c !=','){ //posibil }
ungetc(c,f_in);
fprintf(f_out,"%s,\n",Val_Buf);
break;
}
fscanf(f_in," ");
}
fprintf(f_out,"%s,",Val_Buf);
getc(f_in);
}
i++;
fscanf(f_in," ");
c = getc(f_in); // }
fscanf(f_in," ");
}
return 0;
}