Cod sursa(job #1342484)

Utilizator gabi.cristacheGabi Cristache gabi.cristache Data 14 februarie 2015 01:48:51
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.7 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 2048

int writeCsvHeader(FILE * fin, FILE * fout) {
    int fieldsCount = 0;
    char buffer[N];
    char delimiters[] = ": \"";
    char * p;

    rewind(fin);
    fgets(buffer, N, fin);
    while (fgets(buffer, N, fin) != NULL) {
        if (buffer[0] == '}') break;

        p = strtok(buffer, delimiters);
        fprintf(fout, p);
        fprintf(fout, ",");
        ++fieldsCount;
    }
    fprintf(fout, "\n");

    return fieldsCount;
}

void writeCsvContent(FILE * fin, FILE * fout, int fields) {
    char buffer[N];
    char delimiters[] = ",: \"";
    char * p;
    int length = 0;

    rewind(fin);
    fgets(buffer, N, fin);
    while (fgets(buffer, N, fin) != NULL) {
        if (buffer[0] == '}') {
            fprintf(fout, "\n");
            continue;
        }
        p = strstr(buffer, ":");
        p += 2;
        if (*p == '"') ++p;
        length = strlen(p);
        --length;
        if (*(p + length - 1) == ',') --length;
        if (*(p + length - 1) == '"') --length;
        *(p + length) = '\0';
        fprintf(fout, "%s,", p);
    }
}

int main()
{
    FILE * fin, * fout;
    int fieldsCount = 0;

    if(!(fin  = fopen("converter.in", "rt"))) {
        fprintf(stderr, "Could not open input file!\n");
        exit(EXIT_FAILURE);
    }
    if(!(fout = fopen("converter.out", "wt"))) {
        fprintf(stderr, "Could not open output file!\n");
        exit(EXIT_FAILURE);
    }

    fieldsCount = writeCsvHeader(fin, fout);

    if (fieldsCount > 0) {
        writeCsvContent(fin, fout, fieldsCount);
    }

    fclose(fin);
    fclose(fout);

    return 0;
}