Cod sursa(job #1359880)

Utilizator filip.munteanuFilip Munteanu filip.munteanu Data 25 februarie 2015 09:19:07
Problema Convertor Scor 100
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.25 kb
#include <stdio.h>
#include <stdlib.h>

FILE *f_in, *f_out;

int main()
{
	char c, *sir = (char *)malloc(500000);
	int k = 0, i = 0;
	f_in = fopen("convertor.in", "rt");
	f_out = fopen("convertor.out", "wt");
	
	c = fgetc(f_in);
	//Parcurg primul obiect(caracter cu caracter ca sa aflu cheile si sa le 
	//scriu in fisier
	//Valorile corespunzatoare primului obiect le salvez intr-un sir
	while(c != '}')
	{
		c = fgetc(f_in);
		//k ia valoarea 0 atunci cand ajung la o noua pereche cheie-valoare
		if(c == ',')
			k = 0;
		else
		{
			if(c == '\"')
			{
				c = fgetc(f_in);
		//daca k este 0, inseamna ca urmeaza o cheie pe care o scriu in fisier
				if(k == 0)
				{
					while(c != '\"')
					{
						fputc(c, f_out);
						c = fgetc(f_in);
					}
					fputc(',', f_out);
				}
				//altfel, inseamna ca urmeaza o valoare pe care o salvez in sir
				else
				{	while(c != '\"')
					{
						sir[i] = c;
						c = fgetc(f_in);
						i++;
					}
					sir[i] = ',';
					i++;
				}
				k = 1;
			}
			else
				//Daca caracterul este o cifra, atunci il scriu in sir si 
				//citesc pana ce nu mai intalnesc cifre.
				if((c <= '9') && (c >= '0'))
				{
					while((c <= '9') && (c >= '0'))
					{
						sir[i] = c;
						c = fgetc(f_in);
						i++;
					}
					sir[i] = ',';
					i++;
					k = 0;
				}
		}			
	}
	sir[i] = '\0';
	//Dupa ce am scris toate cheile, copiez sirul in fisierul de output
	fputc('\n', f_out);
	fputs(sir, f_out);
	fputc('\n', f_out);
	k = 1;
	//Citesc caracter cu caracter pana la EOF si scriu valorile in fisier
	while(c != EOF)
	{
		c = fgetc(f_in);
		//k ia valoarea 0 daca urmeaza o valoare
		if(c == ':')
			k = 0;
		else
		{
			//daca k este 0 scriu in fisier
			if(k == 0 && c == '\"')
			{
				c = fgetc(f_in);
				while(c != '\"')
				{
					fputc(c, f_out);
					c = fgetc(f_in);
				}
				fputc(',', f_out);
				k = 1;
			}
			else
				if((c <= '9') && (c >= '0') && k == 0)
				{
					while((c <= '9') && (c >= '0'))
					{
						fputc(c, f_out);
						c = fgetc(f_in);
					}
					fputc(',', f_out);
					k = 1;
				}
				//daca intalnesc "}" inseamna ca obiectul a fost parcurs pana la
				//sfarsit, asa ca trec pe o noua linie in fisierul de output
				if(c == '}')
					fputc('\n', f_out);
		}				
	}
	fclose(f_in);
	fclose(f_out);
	free(sir);
	return 0;
}