Cod sursa(job #1342205)

Utilizator achirialexAlexandru Achiritoaei achirialex Data 13 februarie 2015 17:24:58
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.96 kb
/*
 ============================================================================
 Name        : convertor.c
 Author      : 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define maxChars 1024
#define maxLines 10128
int main(void) {
	FILE *fin = fopen("convertor.in", "r");
	FILE *fout = fopen("convertor.out", "w");
	//freopen("convertor.out", "w", stdout);
	char aux;
	char linie[maxLines][maxChars];
	int contLinii = 0, lungime = 0, i;
	//Citim caracter cu caracter
	//Eliminam spatiile dintre ':' si cheie
	//Eliminam '\n'
	//Avem salvata fiecare linie de tip { }
	while(fscanf(fin, "%c", &aux) == 1){
		if(aux != '\n'){
			if(isspace(aux) || aux < 0){
				if(linie[contLinii][lungime - 1] != ':' && linie[contLinii][lungime - 1] != ',' && linie[contLinii][lungime - 1] != '"' ){
					linie[contLinii][lungime] = aux;
					lungime++;
				}
			}
			else{
				linie[contLinii][lungime] = aux;
				lungime++;
			}
		}
		if(aux == '}'){
			contLinii++;
			lungime = 0;
		}
	}

//	for(i = 0; i < contLinii; i++)
//		printf("%s\n", linie[i]);
	//Cap de tabel
	char header[maxLines][maxChars];
	char *sep = ",";
	char buffer[maxChars];
	char auxiliar[maxChars];
	char *cuv; // pentru strtok
	int contHeader = 0;
	//Luam capul de tabel din prima linie
	strcpy(buffer, linie[0]);
	cuv = strtok(buffer, sep);
	while(cuv != NULL){
		strcpy(header[contHeader], cuv);
		contHeader++;
		cuv = strtok(0, sep);
	}
	//Tratam primul element al capului de tabel separat
	sep = "\"";
	strcpy(auxiliar, header[0]);
	cuv = strtok(auxiliar, sep);
	cuv = strtok(0, sep);
	strcpy(header[0], cuv);
	//Celelalte elemente ale capului de tabel
	for(i = 1; i < contHeader; i++){
		strcpy(auxiliar, header[i]);
		cuv = strtok(auxiliar, sep);
		//cuv = strtok(0, sep);
		strcpy(header[i], cuv);
	}
	for(i = 0; i < contHeader; i++)
		fprintf(fout, "%s,", header[i]);
	fprintf(fout, "\n");
	//Elemente tabel

	char elemente[maxLines][maxChars];
	int j, contElem;
	for(i = 0; i < contLinii; i++){
		sep = ",";
		contElem = 0;
		strcpy(buffer, linie[i]);
		cuv = strtok(buffer, sep);
		while(cuv != NULL){
			strcpy(elemente[contElem], cuv);
			contElem++;
			cuv = strtok(0, sep);
		}
		for(j = 0; j < contElem; j++){
			sep = ":";
			strcpy(auxiliar, elemente[j]);
			cuv = strtok(auxiliar,sep);
			cuv = strtok(0, sep);
			strcpy(elemente[j], cuv);

		}
		for(j = 0; j < contElem; j++){
			sep = "\"";
			if(elemente[j][0] == '"'){
				strcpy(auxiliar, elemente[j]);
				cuv = strtok(auxiliar, sep);
				strcpy(elemente[j], cuv);
			}
			sep = "}";
			if(elemente[j][strlen(elemente[j]) - 1] == '}'){
				strcpy(auxiliar, elemente[j]);
				cuv = strtok(auxiliar, sep);
				strcpy(elemente[j], cuv);
			}
		}
		for(j = 0; j < contElem; j++)
			fprintf(fout, "%s,", elemente[j]);
		fprintf(fout, "\n");
	}

	fclose(fin);
	fclose(fout);
	return 0;
}