Cod sursa(job #1341662)

Utilizator razvan3895Razvan-Mihai Chitu razvan3895 Data 12 februarie 2015 23:15:57
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.85 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TTL	1024	//Total
#define HLF	512	//Half

int main() {
	FILE *f = fopen("convertor.in", "r"), *g = fopen("convertor.out", "w");
	char *line1, *c, a[100], b[100], *p, *line2, ch;
	int i, ok = 0, nr = 0, k;
	line1 = calloc(TTL, 1);
	line2 = calloc(TTL, 1);
	while(1) {
		fscanf(f, "%c", &ch);
		//fprintf(g, "%c", ch);
		if(ch == '}')
			break;
		if(ch == '"') {
			nr++;
			fscanf(f, "%c", &ch);
			while(ch != '"') {
				fprintf(g, "%c", ch);
				fscanf(f, "%c", &ch);
			}
			fprintf(g, ",");
			while(ch != ':')
				fscanf(f, "%c", &ch);
			fscanf(f, "%c", &ch);
			while(ch < 33)
				fscanf(f, "%c", &ch);
			if(ch == '"') {
				fscanf(f, "%c", &ch);
				while(ch != '"')
					fscanf(f, "%c", &ch);
				fscanf(f, "%c", &ch);
			}
			
		}
	}
	fprintf(g, "\n");
	fseek(f, 0, 0);
	k = 0;
	ok = fread(line1, 1, TTL, f);
	while(ok) {
		//printf("\n\n****%s\n\n", line1);
		c = strchr(line1, ':');
		while(c && c < line1 + HLF) {
			for(i = 1; c[i] < 33; i++);
			if(c[i] == '"') {
				i++;
				while(c[i] != '"') {
					fprintf(g, "%c", c[i]);				
					i++;
				}
			}	
			else
				while(c[i] > 33 && c[i] != ',') {
					fprintf(g, "%c", c[i]);				
					i++;
				}
			k++;
			fprintf(g, ",");
			if(k == nr) {
				k = 0;
				fprintf(g, "\n");
			}
			c = strchr(c + i, ':');
		}
		memcpy(line2, line1, TTL);
		memcpy(line1, line1 + HLF, HLF);
		memset(line1 + HLF, 0, HLF);
		ok = fread(line1 + HLF, 1, HLF, f);
	}
	c = strchr(line2 + HLF, ':');
	while(c) {
		for(i = 1; c[i] < 33; i++);
		if(c[i] == '"') {
			i++;
			while(c[i] != '"') {
				fprintf(g, "%c", c[i]);				
				i++;
			}
		}	
		else
			while(c[i] > 33 && c[i] != ',') {
				fprintf(g, "%c", c[i]);				
				i++;
			}
		k++;
		fprintf(g, ",");
		if(k == nr) {
			k = 0;
			fprintf(g, "\n");
		}
		c = strchr(c + i, ':');
	}
	fclose(f);
	fclose(g);				
	return 0;
}