Pagini recente » Cod sursa (job #3243663) | Cod sursa (job #1209652) | Cod sursa (job #137800) | Cod sursa (job #618438) | Cod sursa (job #1361395)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define LUNGVAL 50
void cheie(FILE *, FILE *, int *);
void valoare(FILE *, FILE *, int);
int main(void)
{
FILE *in = fopen("convertor.in", "rt");
FILE *out = fopen("convertor.out", "wt");
int nr = 0;
cheie(in, out, &nr);
fseek(in, 0, SEEK_SET);
valoare(in, out, nr);
fclose(in);
fclose(out);
return 0;
}
void cheie (FILE * in, FILE * out, int * nr)
{
char *cheie;
int i;
int lcheie = LUNGVAL;
cheie = (char *)calloc(LUNGVAL, sizeof(char));
if(!cheie)
return;
int car, ant;
int nrghilimele = 0;
int nrdouapuncte = 0;
i = 0;
while((car = fgetc(in)) != '}')
{
if(car == '"' && nrghilimele == 1 && nrdouapuncte == 0)
{
cheie[i] = '\0';
fprintf(out, "%s,", cheie);
i = 0;
nrghilimele = 0;
(*nr)++;
char *p;
lcheie = LUNGVAL;
p=(char*)realloc(cheie, lcheie * sizeof(char));
if(!p)
{
free(cheie);
return;
}
cheie = p;
p = NULL;
}
else
if(car == '"' && nrghilimele == 1 && nrdouapuncte == 1)
{
nrghilimele = 0;
nrdouapuncte = 0;
}
else
if(car == '"' && nrghilimele == 0)
nrghilimele++;
else if ( car == ':' && nrghilimele == 0)
nrdouapuncte++;
else
if(nrghilimele == 1 && nrdouapuncte == 0)
{
if(i-1 >= lcheie)
{
char *p;
lcheie += LUNGVAL;
p=(char*)realloc(cheie, lcheie * sizeof(char));
if(!p)
{
free(cheie);
return;
}
cheie = p;
p = NULL;
}
cheie[i] = (char)car;
i++;
}
else if(nrghilimele == 0 && nrdouapuncte == 1 && isdigit(ant))
{
if(!isdigit(car))
nrdouapuncte = 0;
}
ant = car;
}
fprintf(out, "\n");
free(cheie);
return ;
}
void valoare(FILE * in, FILE * out, int nr)
{
int i = 0, nrdoupuncte = 0, nrghilimele = 0, nrcur = 0;
int lval = LUNGVAL;
int car, ant;
char *valoare;
valoare = (char*)calloc(LUNGVAL, sizeof(char));
if(!valoare)
return;
while((car = fgetc(in)) != EOF)
{
if(nrdoupuncte == 1 && nrghilimele == 1 && car == '"')
{
valoare[i] = '\0';
fprintf(out, "%s,", valoare);
i = 0;
nrdoupuncte = 0;
nrghilimele = 0;
nrcur++;
if(nrcur == nr)
{
fprintf(out, "\n");
nrcur = 0;
}
char *p;
lval = LUNGVAL;
p=(char*)realloc(valoare, lval * sizeof(char));
if(!p)
{
free(valoare);
return;
}
valoare = p;
p = NULL;
}
else
if(car == ':' && nrghilimele == 0)
nrdoupuncte++;
else
if(car == '"' && nrdoupuncte == 1)
nrghilimele++;
else
if(nrdoupuncte == 1 && nrghilimele == 1)
{
if(i-1 >= lval)
{
char *p;
lval += LUNGVAL;
p = (char*)realloc(valoare, lval * sizeof(char));
if(!p)
{
free(valoare);
return;
}
valoare = p;
p = NULL;
}
valoare[i] = (char)car;
i++;
}
else
if(nrghilimele == 0 && nrdoupuncte == 1 && isdigit(car))
{
valoare[i] = car;
i++;
}
else
if(nrghilimele == 0 && nrdoupuncte ==1 && isdigit(ant))
{
if(!isdigit(car))
{
nrdoupuncte = 0;
valoare[i] = '\0';
fprintf(out, "%s,", valoare);
i = 0;
nrcur++;
if(nrcur == nr)
{
fprintf(out,"\n");
nrcur = 0;
}
}
}
ant = car;
}
free(valoare);
}