Cod sursa(job #1350308)

Utilizator cristian.cazanCristian-Claudiu Cazan cristian.cazan Data 20 februarie 2015 19:06:30
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.23 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>




int main()
{
    FILE *f,*g;
    char c,*p,*q=NULL;
    int i,j,nrg=0,nrdp=0,nra=0,adp=0,dim;

 
    if((f = fopen("convertor.in","rt")) == NULL || (g=fopen("convertor.out","wt")) == NULL)
        perror("NU S-A PUTUT DESCHIDE FISIERUL");
 
    i=0;
    j=0;
    fseek(f,0,2);
    dim=ftell(f);
    fseek(f,0,0);
    p=malloc((dim/2)*sizeof(char));
    q=malloc(dim*sizeof(char));
    while(c = fgetc(f) != EOF)
    {
        
        if( c == '\n')
            continue;
        if( c == '"')
	{	nrg++;
                continue;
        }
        if( c == '{')
            {
		nra++;
		adp=0;
		continue;
	    }
        if( c == ':' )
        {
            	nrg = 0;
            	adp++;
            	nrdp++;
            if(nra == 1)
            {
            	p[i]=',';
           	 i++;
            }
            if(adp != 1 )
            {   
                q[j]=',';
                j++;
            }
            continue;
        }
        if( c == ',')
        {
            nrg = 0;
            nrdp = 0;
        }
        // pentru setul de chei
        if( nra == 1 && nrdp == 0 && nrg == 1 )
        {
            p[i]=c;
            i++;
        }
        // pentru valorile intregi ( fara ghilimele)
 
        if( nrdp == 1 && nrg == 0 && c != ' ' && c != ',' && c != '}' && c != '{' && c != ']' && c != '[')
        {
            q[j]=c;
            j++;
        }
 
        // pentru valorile ne intregi ( cu ghilimele)
 
        if( nrdp == 1 && nrg == 1 && c != '}' && c != '}' && c != ',' && c != ']' && c != '[')
        {	
            q[j]=c;
            j++;
        }
 
        // acum dupa fiecare obiect trecem pe rand nou
 
        if( c == '}' )
        {
            if(nra == 1 )
            {
                p[i]='\n';
                i++;
                q[j]=',';
                j++;
                q[j]='\n';
                j++;
            }else
            {
                q[j]=',';
                j++;
                q[j]='\n';
                j++;
            }
        }
        if( c == ']')
        {
            p[i]='\0';
            q[j]='\0';
            break;
        }
    
}
    fprintf(g,"%s%s",p,q);
    free(q);free(p);
    fclose(f);fclose(g);
    return 0;
}