Cod sursa(job #1350592)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 20 februarie 2015 20:50:25
Problema Convertor Scor 30
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.24 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>

#define FIN  "convertor.in"
#define FOUT "convertor.out"

#define DIM_BUFFER 1024

FILE *fin, *fout;

void eliminateSpaces(char* param){
    int length = strlen(param);
    bool inString = false;
    for(int i=length-1; i >= 0; i--){
        if(param[i] == '\"'){
            inString = !inString;
        }
        if(param[i] == ' '){
            if(inString){
                continue;
            }
            memcpy(param+i,param+i+1,length-i);
        }
    }
}


void printKeys(char* param){
    int length = strlen(param);
    bool inString;

    eliminateSpaces(param);
    char* token = strtok(param,"[{\"\n:,");
    inString = true;
    while(token != NULL){
        if(inString){
            fputs(token,fout);
            fputs(",",fout);
            printf("%s,", token);
        }
        inString = !inString;
        token = strtok(NULL,"\"\n:,");
    }
}

void printValues(char* param){
    int length = strlen(param);
    bool inString;

    eliminateSpaces(param);
    char* token = strtok(param,"[{\"\n:,");
    inString = false;
    while(token != NULL){
        if(inString){
            if(token[0] == '{'){
                fputs("\n",fout);
                printf("\n");
                token = strtok(NULL,"\"\n:,");
                inString = false;
                continue;
            }
            fputs(token,fout);
            fputs(",",fout);
            printf("%s,", token);
        }
        inString = !inString;
        token = strtok(NULL,"\"\n:,");
    }
}

int main(){
    fin  = fopen(FIN , "rt");
    fout = fopen(FOUT, "wt");
    char buffer[DIM_BUFFER];
    char *res;

    //PARSE KEYS
    while(!feof(fin)){
        fgets(buffer,DIM_BUFFER,fin);
        res = strchr(buffer,'}');
        if(res != NULL){
            res[0] = '\0';
            printKeys(buffer);
            break;
        }
        printKeys(buffer);
    }

    fputs("\n",fout);
    printf("\n");
    fseek(fin, SEEK_SET, 0);

    //PARSE VALUES
    while(!feof(fin)){
        fgets(buffer,DIM_BUFFER,fin);
        printValues(buffer);
    }

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