Cod sursa(job #1361591)

Utilizator KazemoPaul Izot Kazemo Data 25 februarie 2015 22:21:38
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.01 kb
#include <stdio.h>
#include <stdlib.h>

int main () {
	FILE *fi, *fo;
	char json;
	int ok;
	int indice1 = 0, indice2 = 0;
	
	fi = fopen ("convertor.in", "rt");
	fo = fopen ("convertor.out", "wt");
	//merg pana la cheie
	while (json != '"') {
		fscanf(fi, "%c", &json);
	}
	ok = 1;
	//aici afisez cheile
	while (json != '}') {
		fscanf(fi, "%c", &json);
		//daca cursorul este pe o cheie, o afisez
		if ( ok ) {
			if ( json == '"') {
				ok = 0;
				fprintf(fo, ",");
				continue;
			}
			fprintf(fo, "%c", json);
			continue;
		}
		//daca nu, caut urmatoarea cheie
		else if (json == ',') {
			while (json != '"') {
				fscanf(fi, "%c", &json);
			}
			ok = 1;
		}
	}
	fprintf(fo, "\n");
	
	fclose (fi);
	fi = fopen ("convertor.in", "rt");
	
	fscanf(fi, "%c", &json);
	
	//aici afisez valorile
	while (json != ']') {
		if (json == '{') {
			while (json != '}') {
				fscanf(fi, "%c", &json);
				//afisez valoarea (sir de caractere)
				if ( indice1 ) {
					if ( json == '"') {
					indice1 = 0;
					fprintf(fo, ",");
					continue;
					}
				fprintf(fo, "%c", json);
				continue;
				}
				//afisez valoarea (intreg)
				if ( indice2 ) {
					if ( ( json == ',') || (json == '}') || (json == '\n') ) {
					indice2 = 0;
					fprintf(fo, ",");
					continue;
					}
				fprintf(fo, "%c", json);
				continue;
				}
			
				//parcurg fisierul pana la o valoare (sau pana aflu ca nu mai sunt)
				while ( (json != ':') && (json != '}') ) {
					fscanf(fi, "%c", &json);
				}
				//daca a gasit } atunci e sfarsit de linie
				if (json == '}') {
					break;
				}
				fscanf(fi, "%c", &json);
				//parcurg spatiile albe
				while ( (json == ' ') ||  (json == '\n') ) {
					fscanf(fi, "%c", &json);
				}
				//daca este sir de caractere intra pe primul if
				if (json == '"') {
					indice1 = 1;
				}
				//daca nu intra pe al doilea
				else {
					indice2 = 1;
					fprintf(fo, "%c", json);
				}
				
			}
			//trec pe urmatoarea linie
			fprintf(fo, "\n");
		}
		else {
			fscanf(fi, "%c", &json);
		}
	}	
	
	fclose (fi);
	fclose (fo);
	
	return 0;
}