Cod sursa(job #1354781)

Utilizator remus.ionitaIonita Remus remus.ionita Data 22 februarie 2015 00:00:55
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.85 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void reset_count (char x, int *count, FILE *f, char *line, int *pos) {
	if ( x == '}' ) {
		line[*pos] = '\n';
		fputs(line,f);
		//strcpy(line,"");
		*pos = 0;
		*count = 0;
	}
}
void prelucrare(char *namein, char *nameout) {
        FILE *f1 = fopen(namein, "r");
        FILE *f2 = fopen(nameout, "a");
	int count = 0;
	int virg = 0;
	char c1, c2;
	char line[300000];
	int pos = 0;

	while ( (c1 = fgetc(f1)) != '}' ) {

		if (c1 == '"') {
			virg = 1;
			count ++;
			while ( (c2 = fgetc(f1)) != '}') { 
				if (c2 == '"')
					break;
				if (count % 2 == 1 ) 
					line[pos++] = c2;
			}
		}
		if ( (c1 - '0') >= 0 && (c1 - '0') <= 9 ) {
			virg = 1;
			count ++;
			while ( (c2 = fgetc(f1)) != EOF) {
				if ( (c2 - '0') < 0 || (c2 - '0') > 9 )
					break;
                        }
                }
		if (virg && count % 2 == 1) {
			line[pos++] = ',';
			virg = 0;
			}
	}
	reset_count('}',&count,f2,line,&pos);
	virg = 0;
	fseek(f1,0,0);	

	while ( (c1 = fgetc(f1)) != EOF ) {
		reset_count(c1,&count,f2,line,&pos);
		if (c1 == '"' ) {
			virg = 1;
			count ++;
			while ( (c2 = fgetc(f1)) != EOF) { 
					if (c2 == '"') 
						break;
					if (count % 2 == 0 )
						line[pos++] = c2;
					reset_count(c2,&count,f2,line,&pos);
			}
		}
		if ( (c1 - '0') >= 0 && (c1 - '0') <= 9 ) {
			virg = 1;
			count ++;
			if (count % 2 == 0 ) 
				line[pos++] = c1;
			while ( (c2 = fgetc(f1)) != EOF) {
				if ( (c2 - '0') < 0 || (c2 - '0') > 9 )
					break;					
				if (count % 2 == 0 ) 
					line[pos++] = c2;
				reset_count(c2,&count,f2,line,&pos);
                        }
		}
		if (virg && count % 2 == 0) {
			line[pos++] = ',';
			virg = 0;
		}
	}
        fclose(f2);
}
int main(void)
{
        char namein[] = "convertor.in";
        char nameout[] = "convertor.out";
        prelucrare(namein,nameout);
        return 0;
}