Pagini recente » Cod sursa (job #3172494) | Cod sursa (job #2577413) | Cod sursa (job #2919923) | Cod sursa (job #2892520) | Cod sursa (job #1347494)
//PII
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main()
{
FILE *f, *g;
char *linie;
int ct = 0, i = 0, ok = 0;
//variabila ct este folosita pentru numerotarea aparitiilor ghilimelelor
linie = (char *)calloc(1025, sizeof(char));
f = freopen("convertor.in", "rb", stdin);
g = freopen("convertor.out", "wb", stdout);
//se va citi linie cu linie din fisierul de intrare
while(fread(linie, sizeof(char *), 1, f) && ok == 0)
{
/*variabila ok este folosita pentru a opri prima structura repetitiva while
chiar daca fisierul nu s-a terminat*/
i = 0;
while(linie[i] != '}' && i < strlen(linie))
{
if(linie[i] == '\"')
{
ct++;
}
else
{
/*se va parcurge o bucata din fisierul de intrare pentru a
scrie in cel de iesire mai intai cheile*/
if(ct == 1)
{
fwrite(&linie[i], 1, sizeof(char), g);
}
else
if(linie[i] == ',')
{
/*daca s-a intalnit virgula, s-a citit deja o pereche
de forma cheie-valoare*/
fwrite(&linie[i], 1, sizeof(char), g);
ct = 0;
}
}
i++;
}
/*se marcheaza prin variabila ok faptul ca s-au citit toate
cheile existente*/
if(i < strlen(linie))
ok = 1;
}
fprintf(g, "%c\n", ',');
//se muta pointerul asociat fisierului de intrare la inceputul acestuia
fseek(f, 0, SEEK_SET);
ct = 0;
ok = 0;
/*se realizeaza aceeasi parcurgere a fisierului ca cea anterioara
dar se ignora cheile si se afiseaza doar valorile*/
while(fread(linie, 1, sizeof(char *), f) && ok == 0)
{
i = 0;
while(linie[i] != ']' && i < strlen(linie))
{
if(linie[i] == '\"')
ct++;
else
{
if(linie[i] == ',' && ct)
{
ct = 0;
fwrite(&linie[i], 1, sizeof(char), g);
}
if(linie[i] == '}')
{
fprintf(g, "%c\n", ',');
ct = 0;
}
//pentru ct fie 2 fie 3, inseamna ca ne situam pe o valoare
if(ct == 2)
if(linie[i] <= '9' && linie[i] >= '0')
fwrite(&linie[i],1,sizeof(char),g);
if(ct == 3)
fwrite(&linie[i], 1, sizeof(char), g);
}
i++;
}
if(i < strlen(linie))
ok = 1;
}
fclose(g);
fclose(f);
free(linie);
return 0;
}