Cod sursa(job #1343623)

Utilizator rvintilaVintila Ioan-Raul rvintila Data 15 februarie 2015 17:51:57
Problema Convertor Scor 60
Compilator c Status done
Runda rosedu_cdl_2015 Marime 3.04 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 1024

void get_column(char columns[1000][1000],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;
    char columns[1000][1000];
	for(i = 0; i < 1000; i++)
		memset(columns[i],0,1000);
    get_column(columns,file_json,&nr_col);
	for(i = 0; i < nr_col ; i++)
		fprintf(file_out,"%s,",columns[i]);
	fprintf(file_out,"\n");
	get_lines(file_json,file_out,&nr_col);
	fclose(file_json);
	fclose(file_out);
    return 0;
}
void get_column(char columns[1000][1000],FILE *file_json,int *nr_col) {
    int i,j = 0,ok = 0,len;
    char line[BUFSIZE],sample[5000];

	/* Separ continutul primelor acolade */

    while(fgets(line,BUFSIZE,file_json)) {
		len = strlen(line);
        for(i = 0; i < len && line[i] != '}'; i++) {
            //printf("%c",line[i]);
            if(ok || line[i] == '{') {              
				ok = 1;
                sample[j++] = line[i];
            }
        }
        if (line[i] == '}')
            break;
    }
	sample[j] = 0;
	j = 0;
	//printf("%s",sample);
	for(i = 0; i < strlen(sample); i++) {
		if (sample[i] == '"') {
			strncpy(columns[j++],sample + i + 1,strchr(sample + i + 1,'"') - sample - i - 1);
			columns[j-1][strlen(columns[j-1])] = 0;
		//	printf("%s,",columns[j-1]);
			(*nr_col)++;
			i = strchr(sample + i + 1,'"') - sample + 1;
			/* sar peste urmatoarele " sau numar */
			for( ; i < strlen(sample); i++) {
				if(sample[i] == '"') {
					i = strchr(sample + i + 1,'"') + 1 - sample;
					break;
				}
				if(isdigit(sample[i])) {
					while(isdigit(sample[++i]))
						;
					break;
				}	
			}
		}
	}
    //printf("%s",columns[0]);
	rewind(file_json);
}

void get_lines(FILE *file_json,FILE *file_out,int *nr_col) {
	int i,k = 0,ok = 1,len;
	char line[BUFSIZE];
	while(1) {
	
		if(fgets(line,BUFSIZE,file_json)) {
			//printf("%s",line);			
			i = 0;
			while (1) {
				len = strlen(line);
				if(!(i < len))
					break;
				if (ok) {
					len = strlen(line);
					for( ; i < len; i++) {
						if(line[i] == '"') {
							//printf("%s",line + i);
							i = strchr(line + i + 1,'"') + 1 - line;
							ok = 0;
							break;
						}
					}
				}		
				if (!ok) {
					len = strlen(line);
					for( ; i < len; i++) {
						//printf("%s",line);
						if(line[i] == '"') {
							//printf("%s",line+i);
							while(line[++i] != '"') {
								fprintf(file_out,"%c",line[i]);
								//printf("%c",line[i]);
							}
							fprintf(file_out,",");
							i++;
							k++;
							if(k == *nr_col) {
								fprintf(file_out,"\n");
								k = 0;
							}
							ok = 1;
							break;
						}
						if(isdigit(line[i])) {
							while(isdigit(line[i]))
								fprintf(file_out,"%c",line[i++]);
							fprintf(file_out,",");
							k++;
							if(k == 4) {
								fprintf(file_out,"\n");
								k = 0;
							}
							ok = 1;
							break;
						}
					}
				}
			}
		}
	else break;		
	}
}