Cod sursa(job #1359777)
Utilizator | Data | 25 februarie 2015 03:03:35 | |
---|---|---|---|
Problema | Convertor | Scor | 100 |
Compilator | c | Status | done |
Runda | rosedu_cdl_2015 | Marime | 2.58 kb |
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char c, *key, *val, *line;
int dp=0, ghil=0, i=0, j=0, k=0, l=0, poz=0;
FILE *f=fopen("convertor.in","rt");
FILE *g=fopen("convertor.out","wt");
key=(char *)calloc(10000000, sizeof(char));
val=(char *)calloc(10000000, sizeof(char));
line=(char *)calloc(1024, sizeof(char));
i=j=k=0;
while(c!=']')
{
//fscanf(f,"%c",&c);
if(poz==l)
{
fgets(line, 1024, f);
poz=0;
l=strlen(line);
}
c=line[poz++];
if(c=='{')
{
while(c!='}')
{
//fscanf(f,"%c",&c);
if(poz==l)
{
fgets(line, 1024, f);
poz=0;
l=strlen(line);
}
c=line[poz++];
if(c=='"' && dp==0)
{
//fscanf(f,"%c",&c);
if(poz==l)
{
fgets(line, 1024, f);
poz=0;
l=strlen(line);
}
c=line[poz++];
while(c!='"')
{
key[k++]=c;
//fscanf(f,"%c",&c);
if(poz==l)
{
fgets(line, 1024, f);
poz=0;
l=strlen(line);
}
c=line[poz++];
}
key[k++]=',';
}
else
{
if(c==':') dp=1;
else
{
if(dp==1 && (c!=' ' && c!='\n'))
{
if(c=='"')
{
//fscanf(f,"%c",&c);
if(poz==l)
{
fgets(line, 1024, f);
poz=0;
l=strlen(line);
}
c=line[poz++];
ghil=1;
}
while(!(c=='"' || (ghil==0 && (c==',' || c==' ' || c=='\n' || c=='}'))))
{
val[j++]=c;
//fscanf(f,"%c",&c);
if(poz==l)
{
fgets(line, 1024, f);
poz=0;
l=strlen(line);
}
c=line[poz++];
}
val[j++]=',';
val[j]='\0';
dp=ghil=0;
}
}
}
}
if(i==0)
fprintf(g,"%s\n",key);
fprintf(g,"%s\n",val);
i++;
j=k=0;
}
}
free(key);
free(val);
free(line);
return 0;
}