Pagini recente » Cod sursa (job #1994725) | Cod sursa (job #835719) | Cod sursa (job #1994664) | Cod sursa (job #1284444) | Cod sursa (job #1361008)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define DIM 3000
void strdel(char *p, int n){
char *a;
a=p+n;
strcpy(p,a);
p[strlen(p)]='\0';
}
char * element(char *element){//returneaza elementul dintre adresa a si b fara spatii in afara ghilimelelor
//elinam spatiile idn afara ghilimelelor
int ghm;//verificam daca avem nr par sau impar de ghilimele
//daca e par eliminam spatiile
//daca e impar le lasam in pace
ghm=0;
int j=0,i,naux=1;
char *aux;//la sfarsit vom trece intr-un alt vector , alocat dinamic , ce va fi returnat
aux=(char*)malloc(naux*DIM*sizeof(char));
for(i=0;i<strlen(element);i++){
if(ghm%2==0 && isspace(element[i]))
continue;
if(strlen(aux)+1==naux*DIM){
naux++;
aux=(char*)realloc(aux,naux*DIM*sizeof(char));
}
aux[j]=element[i];
j++;
if(element[i]=='\"')
ghm++;
}
aux[j]='\0';
return aux;
}
void write(char *s,FILE *f){//s -> elementul din care extragem atributele , n , nr de atribute , f fisierul in care scriem
int i , j;
char *a;
a=strchr(s,':');
while(a!=NULL ){
a=a+1;
j=0;
while(a[j]!=',' && a[j] !='}'){
if(a[j]=='\"'){
j++;
continue;
}
fputc(a[j],f);
j++;
}
fputc(',',f);
a=strchr(a,':');
}
fputc('\n',f);
}
int main(){
FILE *in=fopen("convertor.in","r");
FILE *out=fopen("convertor.out","w");
char *first;//in el retinem categoriile , astfel incat sa le putem scrie in fisier
int nfirst=1;
char **categ;
char *fin,c=' ';//va fi un vector ce il vom folosi pt a citi element cu element
int nfin=1;
categ=(char**)malloc(200*sizeof(char*));//in el tinem minte categoriile
first=(char*)malloc(nfirst*DIM*sizeof(char));
fin=(char*)malloc(nfin*DIM*sizeof(char));
if (in==NULL){
fprintf(stderr, "err\n");
exit(1);
}
//char s[1025];
int i;
//OBTINEM CATEGORIILE
i=0;
while(c!='}'){
c=fgetc(in);
if(strlen(fin)+1==nfin*DIM){//in cazul in care lungimea sirului e mai mare decat nfin*dim , realocam
nfin++;
fin=(char*)realloc(fin,nfin*DIM*sizeof(char));
}
fin[i]=c;
i++;
}
fin[i]='\0';
fclose(in);
in=fopen("convertor.in","r");
char *a;
a=strtok(fin,",:");
i=0;
while(a!=NULL){
if(i%2==0){
strcat(first,a);
}
a=strtok(NULL,",:");
i++;
}
char *b;
char tst[]=" ";
b=tst;//am facut asta pentru a putea intra in while(!=NULL)
a=strchr(first,'"');
int n=0 ;
char *aux;
while(a!=NULL && b!=NULL){
b=strchr(a+1,'"');
aux=(char*)malloc((b-a)*sizeof(char));
strncpy(aux,a+1, (int)(b-a-1));
aux[b-a-1]='\0';
categ[n]=strdup(aux);
fprintf(out,"%s,",categ[n]);
n++;
a=strchr(b+1,'"');
}
fprintf(out,"\n");
c=' ';//pur si simplu e initializat ai sa poata intra in while
while(c!=EOF){
strcpy(fin,"");//eliberam vectorul ce urmeaza a fi prelucrat
c=fgetc(in);
if(c=='{'){
i=0;
while(c!='}'){
c=fgetc(in);
if(strlen(fin)+1==nfin*DIM){//in cazul in care lungimea sirului e mai mare decat nfin*dim , realocam
nfin++;
fin=(char*)realloc(fin,nfin*DIM*sizeof(char));
}
fin[i]=c;
i++;
}
fin[i]='\0';
char *no_spaces;
no_spaces=element(fin);
write(no_spaces,out);
free(no_spaces);
}
}
fclose(out);
fclose(in);
return 0;
}