Cod sursa(job #1358462)

Utilizator liviudanSarariu Liviu - Dan liviudan Data 24 februarie 2015 17:07:07
Problema Convertor Scor 100
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.16 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main()
{
    char a[100],b[10500][100],c;
    int i=-1,j=0,x;
    FILE *f_in,*f_out;
    f_in=fopen("convertor.in","r");
    f_out=fopen("convertor.out","w");
    while(1) // se citeste prima linie de json, de la primul { la primul } afisandu.se capetele de tabel(cheile) si se retin valorile pentru a se afisa
    {       // pe urmatoarea linie de csv.
        x=fscanf(f_in,"%*[^\"}]");
        x=fscanf(f_in,"%c",&c);
        if(c=='}') break;
        x=fscanf(f_in,"%[^\"}]",a);
        fprintf(f_out,"%s,",a);
        x=fscanf(f_in,"%c",&c);
        x=fscanf(f_in,"%*[^\"0123456789}]");
        x=fscanf(f_in,"%c",&c);
        if(c=='"')
        {
            x=fscanf(f_in,"%[^\"]",a);
            i++;
            strcpy(b[i],a);
        }
        else if(c=='}') break;
        else
        {
            x=fscanf(f_in,"%[0123456789]",a);
            i++;
            b[i][0]=c;
            if(isdigit(a[0]) && x)
                strcpy(b[i]+1,a);
            else
                b[i][1]='\0';
        }
        x=fscanf(f_in,"%c",&c);
        if(c=='}')break;
    }
    fprintf(f_out,"\n");
    for(j=0;j<=i;j++)
        fprintf(f_out,"%s,",b[j]);
    fprintf(f_out,"\n");
    while(1) // se citesc si afiseaza valorile din csv, prezente mereu dupa : , tinand cont de linii dupa }
    {
        x=fscanf(f_in,"%*[^:}]");
        x=fscanf(f_in,"%c",&c);
        if(c=='}')
        {
            x=fscanf(f_in,"%*[^:]");
            x=fscanf(f_in,"%c",&c);
            if(x==-1)break;
            else if(c!='}')fprintf(f_out,"\n");
        }
        x=fscanf(f_in,"%*[^\"0123456789]");
        x=fscanf(f_in,"%c",&c);
        if(c=='"')
        {
            x=fscanf(f_in,"%[^\"]",a);
            fprintf(f_out,"%s,",a);
        }
        else if(isdigit(c))
        {
            fprintf(f_out,"%c",c);
            x=fscanf(f_in,"%[0123456789]",a);
            if(isdigit(a[0]) && x)
                fprintf(f_out,"%s,",a);
            else
                fprintf(f_out,",");
        }
    }
    fclose(f_in);
    fclose(f_out);
    return 0;
}