Cod sursa(job #1343938)

Utilizator rvintilaVintila Ioan-Raul rvintila Data 16 februarie 2015 01:52:38
Problema Convertor Scor 90
Compilator c Status done
Runda rosedu_cdl_2015 Marime 3.61 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 1024
 
void get_column(FILE *file_out,FILE *file_json,int *nr_col);
void get_lines(FILE *file_json,FILE *file_out,int *nr_col);
 
int main()
{
    FILE *file_json = fopen("convertor.in","r");
    FILE *file_out = fopen("convertor.out","w");
    int nr_col = 0,i;
    get_column(file_out,file_json,&nr_col);
    fprintf(file_out,"\n");
    get_lines(file_json,file_out,&nr_col);
    fclose(file_json);
    fclose(file_out);
    return 0;
}
void get_column(FILE *file_out,FILE *file_json,int *nr_col) {
    int i,j = 0,ok = 0,aux;
    char line[BUFSIZE],*sample;
 
    sample = malloc( 10000 );
 
    /* Separ continutul primelor acolade */
 
    while(fgets(line,BUFSIZE,file_json)) {
        for(i = 0; i < strlen(line) && line[i] != '}'; i++) {
            if(ok || line[i] == '{') {             
                ok = 1;
                sample[j++] = line[i];
            }
        }
        if (line[i] == '}')
            break;
    }
    sample[j] = 0;
 
    i = 0;
 
    point :
    while(strchr(sample + i,'\"')) {
        i = strchr(sample + i,'\"') + 1 - sample;
        aux = strchr(sample + i,'\"') + 1 - sample;
        fwrite(sample + i ,aux - i - 1,1,file_out);
        fwrite(",",1,1,file_out);
        i = aux;
        (*nr_col)++;
        while(i++)
            switch (sample[i]) {
                case '\"' :
                    aux = strchr(sample + i + 1,'\"') + 1 - sample;
                    i = aux;
                    goto point;
                default :
                    if(isdigit(sample[i])) {
                        aux = i++;
                        while(isdigit(sample[i++]))    
                            ;
                        goto point;                                                   
                    }
            }
    }
    //fwrite("\n",1,1,file_out);
    rewind(file_json);
}
 
void get_lines(FILE *file_json,FILE *file_out,int *nr_col) {
    int k = 0,ok = 0;
    char c;
    while((c = fgetc(file_json)) != EOF) {
        if(c == '"') {                  // primul " de la cheie
            while((c = fgetc(file_json)) != EOF) {
                if(c == '"') {          // al doilea " de la cheie
                    ok = 1;
                    while((c = fgetc(file_json)) != EOF) {
                        if(c == '"') { 
                            while((c = fgetc(file_json)) != EOF && c != '"') 
                                fprintf(file_out,"%c",c);
                            fprintf(file_out,",");
                            k++;
                            if(k == *nr_col) {
                                fprintf(file_out,"\n");
                                k = 0;
                            }
                            ok = 0;
                            break;
                        }
                        else if (isdigit(c)) {                     
                            fprintf(file_out,"%c",c);
                            while((c = fgetc(file_json)) != EOF && isdigit(c)) {                           
                                fprintf(file_out,"%c",c);
                            }
                            fprintf(file_out,",");
                            k++;
                            if(k == *nr_col) {
                                fprintf(file_out,"\n");
                                k = 0;
                            }
                            ok = 0;
                            break;
                        }
                    }
                if(!ok)
                    break;
                }
            }
        }
    }
}