#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 1024
void get_column(FILE *file_out,FILE *file_json,int *nr_col);
void get_lines(FILE *file_json,FILE *file_out,int *nr_col);
int main()
{
FILE *file_json = fopen("convertor.in","r");
FILE *file_out = fopen("convertor.out","w");
int nr_col = 0,i;
get_column(file_out,file_json,&nr_col);
fprintf(file_out,"\n");
get_lines(file_json,file_out,&nr_col);
fclose(file_json);
fclose(file_out);
return 0;
}
void get_column(FILE *file_out,FILE *file_json,int *nr_col) {
int i,j = 0,ok = 0,aux;
char *line,*sample;
sample = malloc( 7000 );
line = malloc ( BUFSIZE ):
/* Separ continutul primelor acolade */
while(fgets(line,BUFSIZE,file_json)) {
for(i = 0; i < strlen(line) && line[i] != '}'; i++) {
if(ok || line[i] == '{') {
ok = 1;
sample[j++] = line[i];
}
}
if (line[i] == '}')
break;
}
sample[j] = 0;
i = 0;
point :
while(strchr(sample + i,'\"')) {
i = strchr(sample + i,'\"') + 1 - sample;
aux = strchr(sample + i,'\"') + 1 - sample;
fwrite(sample + i ,aux - i - 1,1,file_out);
fwrite(",",1,1,file_out);
i = aux;
(*nr_col)++;
while(i++)
switch (sample[i]) {
case '\"' :
aux = strchr(sample + i + 1,'\"') + 1 - sample;
i = aux;
goto point;
default :
if(isdigit(sample[i])) {
aux = i++;
while(isdigit(sample[i++]))
;
goto point;
}
}
}
//fwrite("\n",1,1,file_out);
free(sample);
rewind(file_json);
}
void get_lines(FILE *file_json,FILE *file_out,int *nr_col) {
int k = 0,ok = 0;
char c;
while((c = fgetc(file_json)) != EOF) {
if(c == '"') { // primul " de la cheie
while((c = fgetc(file_json)) != EOF) {
if(c == '"') { // al doilea " de la cheie
ok = 1;
while((c = fgetc(file_json)) != EOF) {
if(c == '"') {
while((c = fgetc(file_json)) != EOF && c != '"')
fprintf(file_out,"%c",c);
fprintf(file_out,",");
k++;
if(k == *nr_col) {
fprintf(file_out,"\n");
k = 0;
}
ok = 0;
break;
}
else if (isdigit(c)) {
fprintf(file_out,"%c",c);
while((c = fgetc(file_json)) != EOF && isdigit(c)) {
fprintf(file_out,"%c",c);
}
fprintf(file_out,",");
k++;
if(k == *nr_col) {
fprintf(file_out,"\n");
k = 0;
}
ok = 0;
break;
}
}
if(!ok)
break;
}
}
}
}
}