Ciao a tutti, ho dei problemi nel fare il parse di un file strutturato in questo modo:
Milano 33719 5 - cod 23425334
Firenze 32453 5 - cod 298234234
Bologna 9535 3 via_prati,via_3_novembre,via_travai, cod 2892342
Praga 36439 5 - cod 29834234
Roma 97275 3 via_prati,via_3_novembre,via_travai, cod 289234234
e vorrei leggero per poi stampare a schermo una cosa del genere:
Module: Firenze
Size: 33719
Nused: 5
Usef by: -
Module: Bologna
Size: 33719
Nused: 3
Usef by: via_prati,via_3_novembre,via_travai
ecc...
Il "cod 23425334" non devo stamparo.
Questo è il mio codice, ma come potete vedere è tutto sfasato:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int* argc, char* argv[]){
FILE *fp;
char *line=NULL;
char ch;
char mod[256],size[256],nused[256],usedby[1024];
int i=0,fase=0;
size_t len=0;
ssize_t read;
//fp=fopen("/proc/modules","r");
fp=fopen("texto.txt","r");
if(fp==NULL){
perror("Errore nell' apertura del file.\n");
exit(EXIT_FAILURE);
}
while(read=getline(&line,&len,fp)!=-1){
strcpy(mod,"");
strcpy(size,"");
strcpy(usby,"");
strcpy(car,"");
fase=0;
for(i=0;i<strlen(line);i++){
if(line[i] == '\t'){
fase++;
}
else if(fase==0){
car[0]=line[i];
strcat(mod,car);
}
else if(fase==1){
car[0]=line[i];
strcat(size,car);
}
else if(fase==2){
car[0]=line[i];
strcat(usby,car);
break;
}
else if(fase==3){
car[0]=line[i];
strcat(usedby,car);
break;
}
}
printf("Module : %s\nSize : %s\nUsed by : %s processes:\n\t",mod,size,nused,usedby);
}
fclose(fp);
return 0;
}
Questo è l'output SBAGLIATO che mi da:;
Module : Milano 33719 5 - cod 23425334
Size :
Used by : processes:
Module : Firenze 32453 5 - cod 298234234
Size :
Used by : processes:
Module : Bologna 9535 3 via_prati,via_3_novembre,via_travai, cod 2892342
Size :
Used by : processes:
Module : Praga 36439 5 - cod 29834234
Size :
Used by : processes:
Module : Roma 97275 3 via_prati,via_3_novembre,via_travai, cod 289234234
Size :
Used by : processes:
Io non so come risolvere il problema... dove sbaglio?