Cod sursa(job #1357716)

Utilizator monicalegendaLegenda Monica monicalegenda Data 24 februarie 2015 02:17:06
Problema Convertor Scor 90
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.64 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BLSIZE 2000000
int count(FILE *, char, int *);
int main()
{

	FILE *input = fopen("convertor.in", "rb");
	FILE *output = fopen("convertor.out", "w");
	int i, j, nr = 0, crt_t = 0, crt_c;
	char *array, *p;
	int poz[1000];
	memset(poz, 0, 1000 * sizeof(int));
	nr = count(input, '}', poz);	
	array = calloc(poz[1], 1);
	fread(array, 1, poz[1], input);
	p = strchr(array, ':');
	while (p) {
		crt_t ++;
		i = 0;
		while (p[i] != '\"')
			i--;
		i--;
		while (p[i] != '\"')
			i--;
		i++;
		while (p[i] != '\"') {
			fprintf(output, "%c", p[i]);
			i++;
		}
		fprintf(output, ",");
		p = strchr(p + 1, ':');

	}
	fprintf(output, "\n");
	fseek(input, 0, 0);
	free(array);
	crt_c = 0;
	for(i = 1; i < nr; i++) {
		array = calloc(poz[i] - poz[i - 1], 1);
		fread(array, 1, poz[i] - poz[i - 1], input);		
		p = strchr(array, ':');
		while (p) {
			crt_c ++;
			j = 1;
			while (p[j] <= 32)
				j++;
			if (p[j] == '\"') {
				j++;
				while (p[j] != '"') {
					fprintf(output, "%c", p[j]);
					j++;
				}
			} else {
				while (strchr("0123456789-", p[j])) {
					fprintf(output, "%c", p[j]);
					j++;
				}
			}
			fprintf(output, ",");
			if(crt_c % crt_t == 0)
				fprintf(output, "\n");
			p = strchr(p + 1, ':');
		}
		free(array);		
	}
	printf("%d\n", nr);
	fclose(input);
	fclose(output);
	return 0;
}

int count(FILE * f, char c, int *v)
{
	fseek(f, 0, 0);
	int nr = 1, poz = 0, len;
	char buff[BLSIZE], *p;
	while (fread(buff, 1, BLSIZE, f)) {
		p = strchr(buff, c);
		while (p) {
				v[nr] = poz + (p - buff);
				nr++;				
				p = strchr(p + 1, c);
		}
		poz += BLSIZE;
		
	}
	fseek(f, 0, 0);
	return nr;
}