Cod sursa(job #1361613)

Utilizator TwistedFaithStanescu Jean Alexandru TwistedFaith Data 25 februarie 2015 22:30:52
Problema Convertor Scor 90
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.8 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

void nfprint(char *ptr, int len);
void solveKeys(FILE *pFile);
void solveValues(FILE *pFile);

int main(){
	/* Open input file */
	FILE *pFile = fopen("convertor.in", "rt");

	/* Redirect output from stdout to convertor.out */
	freopen("convertor.out", "wt", stdout);

	assert (pFile != NULL);

	solveKeys(pFile);
	rewind(pFile);
	solveValues(pFile);

	fclose(pFile);
	return 0;
}

void nfprint(char *ptr, int len){
	int i;

	for (i = 0; i < len; ++i)
		printf("%c", ptr[i]);

	printf(",");
}

void solveKeys(FILE *pFile){
	char *ptr1, str[1025], aux[1025];
	register short int i;
	short int len, dots = 0, quote = 0, commas = 0;

	do{
		fgets(str, 1025, pFile);
		len = strlen(str);

		for(i = 0; i < len; ++i){
			if(str[i] == ':')
				dots++;
			else if(str[i] == ',')
				commas++;
			else if(str[i] == '}'){
				len = -1;
				break;
			}

			if(dots == commas){
				if(str[i] == '"'){
					quote++;

					if (quote % 2 == 0)
						printf(",");
				}
				else if(quote % 2 != 0)
					printf("%c", str[i]);
			}
		}
	}
	while(len != -1);

	printf("\n"); 
}

void solveValues(FILE *pFile){
	char *ptr1, *ptr2, str[1025];
	register short int i;
	short int len, quote = 0, dots = 0, commas = 0;

	while( fgets(str, 1025, pFile) != NULL ){
		len = strlen(str);

		for(i = 0; i < len; ++i){
			if(str[i] == ':')
				dots++;
			else if(str[i] == ',')
				commas++;

			if(dots > commas){
				if(str[i] == '}'){
					printf("\n");
				}
				else if(str[i] == '"'){
					quote++;

					if (quote % 2 == 0)
						printf(",");
				}
				else if(quote % 2 != 0)
					printf("%c", str[i]);

				if ((str[i] >= 48) && (str[i] <= 57) && (quote % 2 == 0)){
					printf("%c", str[i]);

					if ( !((str[i+1] >= 48) && (str[i+1] <= 57)) )
						printf(",");
				}
			}
		}
	}
}