Cod sursa(job #1341068)

Utilizator razvan3895Razvan-Mihai Chitu razvan3895 Data 12 februarie 2015 13:11:17
Problema Convertor Scor 40
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.01 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define READ(c,f)	fread(&c, sizeof(char), 1, f)

int main() {
	FILE *f = fopen("convertor.in", "r"), *g = fopen("convertor.out", "w");
	char *line1, *c, a[100], b[100], *p, v[100], line[1024];
	int i, ok = 0, nr = 0, k;
	line1 = calloc(1024, 1);
	fread(line1, 1, 1024, f);
	c = strchr(line1, ':');
	memset(a, 0, 100);
	memset(b, 0, 100);
	while(c) {
		for(i = 0; c[i] != '"'; i--);
		p = c + i - 1;
		for(i = 0; p[i] != '"'; i--);
		p = p + i;
		if(!nr) {
			strncat(a, p + 1, -i);
			nr ++;
			fprintf(g, "%s,", a);
		}
		else {
			strncat(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, ':');			
	}
	if(ok == -1)
		fprintf(g, "\n");
	else {
		memcpy(line1, line1 + 924, 100);
		memset(line1 + 100, 0, 924);	
		while(fread(line1 + 100, 1, 924, f)) {
			c = strchr(line1 + 100, ':');
			while(c) {
				for(i = 0; c[i] != '"'; i--);
				p = c + i - 1;
				for(i = 0; p[i] != '"'; i--);
				p = p + i;
				if(!nr) {
					strncat(a, p + 1, -i);
					nr ++;
					fprintf(g, "%s,", a);
				}
				else {
					strncat(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 + 924, 100);
			memset(line1 + 100, 0, 924);
		}
	}
	fseek(f, 0, 0);
	k = 0;
	while(fgets(line, 1024, f)) {
		//fprintf(g, "%s", line);
		c = strchr(line, ':');
		while(c) {
			
			k++;
			i = 1;
			while(c[i] < 33) {
				if(c[i] == '-')
					break;
				if(c[i] == 10) {
					fgets(line, 1024, f);
					c = line;
				}
				else
					i++;
				
			}
			if(c[i] == '"')
				i++;
			//puts(c+i);
			while(c[i] != 10 && c[i] != '"' && c[i] != ',') {
				fprintf(g, "%c", c[i]);
				
				i++;
			}
			//puts(c+i);
			
			fprintf(g, ",");
			c = strchr(c + i, ':');
			if(k == nr) {
				fprintf(g, "\n");
				k = 0;
			}
		}
			
	}
	free(line1);
	fclose(f);
	fclose(g);				
	return 0;
}