Cod sursa(job #1360722)

Utilizator Mao_ZedongAndrei Octavian Naca Mao_Zedong Data 25 februarie 2015 17:26:10
Problema Convertor Scor 100
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.38 kb
#include <stdio.h>
	
void write_keys(FILE *in, FILE *out) {
	char c;
	while ((c = fgetc(in)) != '{') {
		if (c == ']') {
			return;
		}
	}
	while (1) {
		while ((c = fgetc(in)) != '"') {
			if (c == '}') {
				return;
			}
		}
		while ((c = fgetc(in)) != '"') {
			fputc(c, out);
		}
		fputc(',', out);
		while ((c = fgetc(in)) != ',') {
			if (c == '}') {
				return;
			}
		}
	}
} 

void write_object_values(FILE *in, FILE *out) {
	char c;
	fputc('\n', out);
	while ((c = fgetc(in)) != '}') {
		if (c == ':') {
			while ((c = fgetc(in)) != ',') {
				if (c == '"') {
					while ((c = fgetc(in)) != '"') {
						fputc(c, out);
					}
					fputc(',', out);
				}
				if ((c <= 57) && (c >=48)) {
					while ((c <= 57) && (c >=48)) {
						fputc(c, out);
						c = fgetc(in);
					}
					fputc(',', out);
				}
				if (c == ',') {
					break;
				}
				if (c == '}') {
					return;
				}
			}
		}
	}
}
		
void write_values(FILE *in, FILE *out) {
	char c;
	while ((c = fgetc(in)) != ']') {
		if (c == '{') {
			write_object_values(in, out);
		}
	}
} 


void  write_CSV(FILE *in, FILE *out) {
	char c;
	while ((c = fgetc(in)) != '[') {
		if (c == EOF) 
			return;
	}
	int pos = ftell(in);
	write_keys(in, out);
	fseek(in, pos, 0);
	write_values(in, out);
}	
	
int main() {
	FILE *in = fopen("convertor.in", "r");
	FILE *out = fopen("convertor.out", "w");
	write_CSV(in, out);
	fclose(in); fclose(out);
	return 0;
}