Cod sursa(job #1350704)

Utilizator marinutzacatana marina marinutza Data 20 februarie 2015 21:55:08
Problema Convertor Scor 10
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.51 kb
#include<stdio.h>
#include<stdlib.h>

int main()
{
	char c, **key, ***val;
	int dp=0, i=0, j=0, k=0, nkey=0, nmax=1000;
	//nkey=numarul de chei dintr-un obiect;
	//nmax=nr maxim de obiecte;
	
	FILE *f=fopen("convertor.in","rt");
	FILE *g=fopen("convertor.out","wt");
	
	while(c!='}')
	{
		fscanf(f,"%c",&c);
		if(c==':') nkey++;
	}
	fseek(f,0,0);
	
	key=(char **)calloc(nkey, sizeof(char *));
	for(i=0;i<nkey;i++)
		key[i]=(char *)calloc(1024, sizeof(char));
	
	val=(char ***)calloc(nmax, sizeof(char **));
	for(i=0;i<nmax;i++)
	{
		val[i]=(char **)calloc(nkey, sizeof(char *));
		for(j=0;j<nkey;j++)
			val[i][j]=(char *)calloc(1024, sizeof(char));
	}
	
	i=j=k=0;
	while(c!=']')
	{
		fscanf(f,"%c",&c);
		if(c=='{')
		{
			j=0;
			while(c!='}')
			{
				fscanf(f,"%c",&c);
				if(c=='"' && dp==0)
				{
					fscanf(f,"%c",&c);
					while(c!='"')
					{
						key[j][k++]=c;
						fscanf(f,"%c",&c);
					}
					k=0;
				}
				else
				{
					if(c==':') dp=1;
					else
					{
						if(dp==1 && (c!=' ' && c!='\n'))
						{
							if(c=='"') fscanf(f,"%c",&c);
							while(c!='"' && c!=',')
							{
								val[i][j][k++]=c;
								fscanf(f,"%c",&c);
							}
							j++;
							dp=k=0;
						}
					}
				}
			}
			i++;
		}
	}
	
	int i1,j1;
	for(i1=0;i1<nkey;i1++)
		fprintf(g,"%s,",key[i1]);
	fprintf(g,"\n");
	for(i1=0;i1<i;i1++)
	{
		for(j1=0;j1<j;j1++)
			fprintf(g,"%s,",val[i1][j1]);
		fprintf(g,"\n");
	}
	
	free(key);
	free(val);
	return 0;
}