#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define nrchei 100
#define lungval 500
char ** cheie(FILE *, FILE *,int *);
void valoare(FILE *, FILE *,int);
int main(void)
{
FILE *in = fopen("convertor.in","rt");
FILE *out = fopen("convertor.out","wt");
char **val;
int nr =0,i;
val = cheie(in,out,&nr);
// printf("%d\n",nr);
for(i=0; i <nr ; i++)
fprintf(out,"%s,",val[i]);
fprintf(out,"\n");
valoare(in,out,nr);
return 0;
}
char ** cheie (FILE * in, FILE * out,int * nr)
{
char ** val,cheie[500];
int i,j;
val = (char **)calloc(nrchei, sizeof(char*));
if(!val)
return NULL;
for( i = 0 ;i < nrchei; i++)
{
val[i] = (char*)calloc(lungval,sizeof(char));
if(!val[i])
{
for(j =0 ; j< i ; j++)
free(val[j]);
free(val);
return NULL;
}
}
int car,ant;
int nrghilimele = 0;
int nrdouapuncte = 0;
i = 0;
j = 0;
while((car = fgetc(in))!='}')
{
if(car == '"' && nrghilimele == 1 && nrdouapuncte== 0)
{
cheie[i]='\0';
fprintf(out,"%s,",cheie);
i=0;
nrghilimele = 0;
(*nr)++;
}
else
if(car == '"' && nrghilimele ==1 && nrdouapuncte == 1)
{
val[j][i]='\0';
// printf("%s\n",val[j]);
i=0;
j++;
nrghilimele = 0;
nrdouapuncte =0;
}
else
if(car == '"' && nrghilimele == 0)
nrghilimele ++;
else if(car == ':'&& nrghilimele == 0)
nrdouapuncte++;
else
if(nrghilimele == 1 && nrdouapuncte ==0)
{
cheie[i]=(char)car;
i++;
}
else
if(nrghilimele == 1 && nrdouapuncte ==1)
{
val[j][i]=(char)car;
i++;
}
else if(nrghilimele == 0 && nrdouapuncte == 1 && isdigit(car))
{
//printf("%c",car);
//char buffer[10];
//sprintf(buffer,"%d",car);
val[j][i]=car;
i++;
}
else if(nrghilimele == 0 && nrdouapuncte ==1 && isdigit(ant))
{
if(!isdigit(car))
{
nrdouapuncte =0;
val[j][i]='\0';
i=0;
j++;
}
}
ant =car;
}
fprintf(out,"\n");
return val;
}
void valoare(FILE * in, FILE * out, int nr)
{
int i=0,j=0,nrdoupuncte=0,nrghilimele=0,nrcur=0;
int car,ant;
char valoare[500];
while((car=fgetc(in))!=EOF)
{
if(nrdoupuncte ==1 && nrghilimele == 1 && car == '"')
{
valoare[i]='\0';
fprintf(out,"%s,",valoare);
i=0;
nrdoupuncte = 0;
nrghilimele =0;
nrcur++;
if(nrcur == nr)
{
fprintf(out,"\n");
nrcur =0;
}
}
else
if(car == ':' && nrghilimele == 0)
nrdoupuncte++;
else
if(car == '"' && nrdoupuncte == 1)
nrghilimele++;
else
if(nrdoupuncte == 1 && nrghilimele ==1)
{
valoare[i]=(char)car;
i++;
}
else
if(nrghilimele == 0 && nrdoupuncte == 1 && isdigit(car))
{
valoare[i]=car;
i++;
}
else
if(nrghilimele == 0 && nrdoupuncte ==1 && isdigit(ant))
{
if(!isdigit(car))
{
nrdoupuncte =0;
valoare[i]='\0';
fprintf(out,"%s,",valoare);
i=0;
nrcur++;
if(nrcur == nr)
{
fprintf(out,"\n");
nrcur =0;
}
}
}
ant =car;
}
}