Cod sursa(job #1341679)

Utilizator razvan3895Razvan-Mihai Chitu razvan3895 Data 12 februarie 2015 23:48:57
Problema Convertor Scor 60
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.6 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TTL	5000	//Total
#define HLF	2500	//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);
	memset(a, 0, 100);
	memset(b, 0, 100);
	while(fread(line1 + HLF, 1, HLF, f)) {
		c = strchr(line1 + HLF, ':');
		while(c) {
			for(i = 0; c[i] != '"'; i--);
			p = c + i - 1;
			for(i = 0; p[i] != '"'; i--);
			p = p + i;
			if(!nr) {
				strncpy(a, p + 1, -i);
				nr ++;
				fprintf(g, "%s,", a);
			}
			else {
				strncpy(b, p + 1, -i);
				if(strcmp(a, b) == 0) {
					ok = -1;
					break;
				}
				nr ++;
				fprintf(g, "%s,", b);
				memset(b, 0, 100);
			}
			c = strchr(c + 1, ':');			
		}
		memcpy(line1, line1 + HLF, HLF);
		memset(line1 + HLF, 0, HLF);
		if(ok == -1)
			break;
	}
	fprintf(g, "\n");
	fseek(f, 0, 0);
	k = 0;
	while(1) {
		fscanf(f, "%c", &ch);
		//printf("%c", ch);
		if(ch == ']')
			break;
		if(ch == ':') {
			fscanf(f, "%c", &ch);
			while(ch < 33)
				fscanf(f, "%c", &ch);
			k ++;
			if(ch == '"') {
				fscanf(f, "%c", &ch);
				while(ch != '"') {
					//printf("%c", ch);					
					fprintf(g, "%c", ch);
					fscanf(f, "%c", &ch);
				}
			}
			else {
				while(ch > 33 && ch != ',') {
					//printf("%c", ch);
					fprintf(g, "%c", ch);
					fscanf(f, "%c", &ch);
				}
			}
			//printf(",");
			fprintf(g, ",");
			if(k == nr) {
				//printf("\n");
				fprintf(g, "\n");
				k = 0;
			}
		}
			
	}
			
			
	
	free(line1);
	free(line2);
	fclose(f);
	fclose(g);				
	return 0;
}