|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
ricerca e sostituzione stringhe C
Allora devo ricercare all'interno una stringa che devo sostituire con un altra
esempio: oggi vado al mare, però al mare il tempo è brutto. parola da ricercare e sostituire: mare parole sostiutiva: montagna Tuttavia quando vado a sostituire parole di lunghezza maggiore me le tronca( funziona solo con parole con stessa lunghezza) così l'esempio diventa: oggi vado al mont, però al mont il tempo è brutto. ecco un pezzo di codice significativo: /* memorizza la posizione */ pos=ftell(fd); /* legge una stringa */ res=fread(letto, sizeof(char), len, fd); if( res<len ) break; /* confronto ed eventuale sostituzione */ if( ! memcmp(argv[1], letto, len) ) { fseek(fd, pos, SEEK_SET); fwrite(argv[2], sizeof(char), len, fd); } Qualche idea del perchè?? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Solitamente quando si fa una sostituzione di questo tipo si va a creare un altro file nel quale si mette il testo con le parole sostituite e poi si va ad eliminare il file vecchio e rinominare il nuovo con il nome del vecchio...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il confronto fra stringhe fallo con strcmp...
|
|
|
|
|
|
#4 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Se fai caso alle due chiamate a fread e fwrite, ti accorgi che, in ciascuno dei due casi, la grandezza della zona interessata è sempre la stessa: len*sizeof(char).
Ho paura che il problema sia più complicato di così. Io lavorerei su una copia del file originario, in cui inserisco volta per volta le righe modificate. Inoltre, userei strcpy, strcat e strcmp, stando molto attento ad allocare ogni volta la memoria che serve con malloc e realloc (e ricordandomi di liberarla con free).
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
|
direi anche strncmp, così si ha più robustezza
__________________
Ciao ciao cagnolino Billy MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen. XBOX Live GamerTag: InsaneMau |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
grazie
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:31.




















