/*
============================================================================
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;
}