PDA

Visualizza la versione completa : [C] problema sostituzione parola in un file


ggd94
28-08-2014, 18:04
Salve a tutti!
sto provando a a sostituire una parola da me inserita(parolaOriginale) con una nuova parola (parolaSostituta) ma il programma mi cancella tutto il testo presente nel file! non capisco per quale motivo ... di seguito vi passo il codice della funzione main e della funzione .c grazie in anticipo a tutti :)
FUNZIONE MAIN



int main(){
char* f="a1.txt";
char* p="odiano";
char* p1="amano";
char* f1;
f1=sostituisciParola(f,p,p1);
stampaTesto(f1);
return 0;
}


FUNZIONE .C


char* sostituisciParola(char* filename,char* parolaOriginale,char* parolaSostituta){
FILE* file=fopen(filename,"w+");
if(file==NULL){
printf("errore nell'aperura del file");
exit(1);
}
char* p;
while(!feof(file)){
fscanf(file,"%s",p);
if(strcmp(p,parolaOriginale)==0){
fprintf(file,"%s",parolaSostituta);
}
else{
fprintf(file,"%s",p);
}
}
fclose(file);
return filename;
}

void stampaTesto(char* filename){
FILE* file1=fopen(filename,"r");
if (file1==NULL){
printf("errore nell'apertura file");
exit(1);
}
char* d;
while(!feof(file1)){
fscanf(file1,"%s",d);
printf("%s ",d);
}
fclose(file1);
}

oregon
28-08-2014, 19:33
Prima di tutto devi allocare lo spazio in memoria per i puntatori che usi nelle funzioni. E' un caso se non va in crash il programma ...

ggd94
28-08-2014, 20:37
ho modificato il codice ma questa volta nel file mi scrive solamente un carattere del codice ASCII non compreso tra quelli leggibili da 33 a 126

oregon
28-08-2014, 20:51
ho modificato il codice ma questa volta nel file mi scrive solamente un carattere del codice ASCII non compreso tra quelli leggibili da 33 a 126

Modificato come ?

ggd94
28-08-2014, 21:09
al posto di char*p (presente nella funzione sostituisciParola) ho messo char p[256] e al posto di char*d(presente nella funzione stampaTesto) ho messo char d[256]

oregon
28-08-2014, 22:42
La modalità di apertura w+ cancella il contenuto del file originale (vedi documentazione su fopen).

Il modo corretto è r+ ma la lettura/scrittura con lo stesso file può risultare tediosa. Meglio aprirne un secondo e scrivere il contenuto modificato eliminando il primo.

ggd94
28-08-2014, 23:19
creando direttamente un secondo file diverso dal primo?

oregon
29-08-2014, 00:00
creando direttamente un secondo file diverso dal primo?

Sì, dal primo leggi e nel secondo scrivi.

ggd94
29-08-2014, 08:45
ok grazie mille :D!

Loading