#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *next(char *from, char *word) {
char sep[] = "{[]:,\n";
word = strtok(from, sep);
return word;
}
void afis_cuv(FILE *f, char *sir, int *nr_cuv, int *first, char *line2, int *pos) {
int i = 1;
while (sir[i] != '"' ) {
if ( *first == 0 && (*nr_cuv) % 2 == 1 ) //afisare anteturi
fputc(sir[i],f); //printf("%c",sir[i]);
if ( (*nr_cuv) % 2 == 0) {
if (*first == 1)
fputc(sir[i],f); //printf("%c",sir[i]);
if (*first == 0) { //linia 2
line2[*pos] = sir[i];
(*pos)++;
}
}
i++;
}
// if ( (*nr_cuv) % 2 == 0 ) printf("nr_cuv: %d; ",*nr_cuv);
if ( (*nr_cuv) % 2 == 1 && *first == 0 && (*nr_cuv) != 1 ) {
strcat(line2,",");
*pos = *pos + 1;
}
if ( (*nr_cuv) % 2 == 0 )
fputc(',',f);//printf(",");
for(;i<strlen(sir);i++)
if(sir[i] == '}') {
fputs("\n",f);//printf("\n");
if (*first == 0) {
strcat(line2,",");
fputs(line2,f);//printf("%s,\n",line2);
fputs("\n",f);
}
*first = 1;
*nr_cuv = 0;
}
}
void afis_num(FILE *f, char *sir, int *nr_cuv, int *first, char *line2, int *pos) {
int i = 0, sf_linie = 0;
// if ( (*nr_cuv) % 2 == 0 ) printf("nr_cuv: %d; ",*nr_cuv);
while ( i < strlen(sir)) {
if( (sir[i] - '0') >= 0 && (sir[i] - '0') <= 9 ) {
if ( (*nr_cuv) % 2 == 0 && *first == 0) {
line2[*pos] = sir[i];
(*pos)++;
}
if ( (*nr_cuv) % 2 == 0 && *first == 1)
fputc(sir[i],f);//printf("%c",sir[i]);
}
else
if (sir[i] == '}') {
fputs("\n",f);//printf("\n");
sf_linie = 1;
if (*first == 0) {
strcat(line2,",");
fputs(line2,f);//printf("%s,\n",line2);
fputs("\n",f);
}
*first = 1;
*nr_cuv = 0;
}
i++;
}
if ( (*nr_cuv) % 2 == 1 && *first == 0 && (*nr_cuv) != 1) {
strcat(line2,",");
*pos = *pos + 1;
}
if(!sf_linie)
if ( (*nr_cuv) % 2 == 0 )
fputc(',',f);//printf(",");
}
void prelucrare(char *namein,FILE *f) {
FILE *f1 = fopen(namein, "r");
char line[10130], *cuv, line2[10000];
int nr_cuv = 1, first = 0;
int pos = 0;
while (fgets(line,10000,f1) != NULL) {
cuv = next(line,cuv);
while (cuv != NULL) {
if (strcmp(cuv," ")) {
char *aux = cuv;
char *t = (char *) strstr(aux,"\"");
if (t) {
afis_cuv(f, t, &nr_cuv, &first, line2, &pos);
}
else {
afis_num(f, aux, &nr_cuv, &first, line2, &pos);
}
nr_cuv++;
}
cuv=next(NULL,cuv);
}
}
}
int main(void)
{
char namein[] = "convertor.in";
//char namein[] = "c.in";
char nameout[] = "convertor.out";
FILE *f = fopen(nameout, "w");
prelucrare(namein,f);
fclose(f);
return 0;
}