#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 1024
void get_column(char *columns[1500],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;
char **columns;
columns = calloc ( 1500 , sizeof(char *) );
for(i = 0; i < 1500; i++)
columns[i] = calloc ( 1500, 1);
get_column(columns,file_json,&nr_col);
for(i = 0; i < nr_col ; i++)
fprintf(file_out,"%s,",columns[i]);
fprintf(file_out,"\n");
get_lines(file_json,file_out,&nr_col);
fclose(file_json);
fclose(file_out);
return 0;
}
void get_column(char *columns[1500],FILE *file_json,int *nr_col) {
int i,j = 0,ok = 0,len;
char line[BUFSIZE],*sample;
sample = malloc ( 2000 );
/* Separ continutul primelor acolade */
while(fgets(line,BUFSIZE,file_json)) {
len = strlen(line);
for(i = 0; i < len && line[i] != '}'; i++) {
//printf("%c",line[i]);
if(ok || line[i] == '{') {
ok = 1;
sample[j++] = line[i];
}
}
if (line[i] == '}')
break;
}
sample[j] = 0;
j = 0;
//printf("%s",sample);
len = strlen(sample);
for(i = 0; i < len; i++) {
if (sample[i] == '"') {
strncpy(columns[j++],sample + i + 1,strchr(sample + i + 1,'"') - sample - i - 1);
columns[j-1][strlen(columns[j-1])] = 0;
// printf("%s,",columns[j-1]);
(*nr_col)++;
i = strchr(sample + i + 1,'"') - sample + 1;
/* sar peste urmatoarele " sau numar */
for( ; i < len; i++) {
if(sample[i] == '"') {
i = strchr(sample + i + 1,'"') + 1 - sample;
break;
}
if(isdigit(sample[i])) {
while(isdigit(sample[++i]))
;
break;
}
}
}
}
//printf("%s",columns[0]);
free(sample);
rewind(file_json);
}
void get_lines(FILE *file_json,FILE *file_out,int *nr_col) {
char *c;
int size,i = 0,k = 0,aux;
fseek(file_json,0,2);
size = ftell(file_json);
rewind(file_json);
c = malloc(size + 1);
fread(c,size,1,file_json);
c[size] = 0;
point :
if(k == *nr_col) {
fwrite("\n",1,1,file_out);
k = 0;
}
while(strchr(c + i,'\"')) {
i = strchr(c + i,'\"') + 1 - c;
i = strchr(c + i,'\"') + 1 - c;
while(i++)
switch (c[i]) {
case '\"' :
aux = strchr(c + i + 1,'\"') + 1 - c;
fwrite(c + i + 1,aux - i - 2,1,file_out);
fwrite(",",1,1,file_out);
i = aux;
k++;
goto point;
default :
if(isdigit(c[i])) {
aux = i++;
while(isdigit(c[i++]))
;
fwrite(c + aux,i - aux - 1,1,file_out);
fwrite(",",1,1,file_out);
k++;
goto point;
}
}
}
}