Newsgroup: it.comp.lang.c
Titolo: Scrivere su file in modo casuale

 
 
Sto provando a fare un programmino, che legga prima, e scriva in un
file.txt, dopo aver trovato una stringa alfanumèrica.
 
Trovo la stringa, memorizzo la posizione con ftell, chiudo il file in
lettura, lo riapro in scrittura, e da lì inizio a scrivere.
 
Ho visto che, sè scrivo in una zona, che non era stata scritta
precedentemente, compaiono dei quadratini vuoti.
Se invece scrivo su una zona già scritta, non ci sono problèmi!
 
Sapete dove possa essere il problema?
 
Gràzie
 
Ciao
 
 
 
 

 Sapete dove possa essere il problema?
 
Cosa intendi per "zona non scritta precedentemente" ? Funziona
solo se scrivi due volte nella stessa zona? Parli di scrivere
oltre la fine del file.
Metti anche un po' di codice cosi' capiamo meglio cosa sta 
cercando di fare.
 
ciao
Giacomo

 
FILE *fp;
 
int len, punt;
 
long puntfp1, puntfp2;
 
char leggilinea[250];
 
char a0[]="PROVA SCRITTURA!\n";
 
char a1[]="[123456789012345678901234567890123456]";
 
fp= fopen("FILE1.txt","r");
 
while (!feof(fp)){
 
fscanf(fp,"%s\n",leggilinea);
 
if(strncmp(leggilinea,a1,50)==0){
fscanf(fp,"%s\n",leggilinea);
printf("%s\n strlen=%d\n",leggilinea,strlen(leggilinea));
punt=strncmp(leggilinea,a2,50);
if(punt==0)puntfp1=ftell(fp);
 fclose(fp);
break;
 
}
 
 
}
 
fclose(fp);
 
 
 
fp= fopen("FILE1.txt","r+");
fseek(fp,puntfp1,SEEK_SET);
fputs(fp,"%s\n",a0);
 
fflush(fp);
fclose(fp);
 
printf("%s -> FINE PROGRAMMA!\n",a0);
 
 
 
 


Non ho capito cosa stai cercando di fare ma tieni conto che se fai un seek 
oltre la fine del file, i buchi vengono riempiti con dei '\0' (che il tuo 
editor visualizza come gli pare):
 
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fseek.html
 
 
"The fseek() function shall allow the file-position indicator to be set 
beyond the end of existing data in the file. If data is later written at 
this point, subsequent reads of data in the gap shall return bytes with 
the value 0 until data is actually written into the gap."
 
Tieni conto che questa è una estensione di POSIX, ISO C non dice nulla a 
riguardo.
 
 
Ciao  Manlio
 
 

 
Come fare per evitare qu�sto? Non posso sovrascrivere del t�sto gi� scritto.
 
Poi, m�glio utilizzare fputs,  fprintf o fwrite? o sono la st�ssa cosa?
 
 
Ciao
 
 
 
 
 
 

 Poi, mèglio utilizzare fputs,  fprintf o fwrite? o sono la stéssa cosa?
 
Come mai questa fissazione per l'accento grafico?

 
 
Fanno cose diverse.  Leggi un manuale per maggiori informazioni.
 
Se devi semplicemente scrivere una stringa su file, usa fputs.
 
 
Ciao  Manlio

 fare.
 
devo cercare in un file.txt,  2 stringhe di caratteri alfanumerici.
Quando trovate, devo scrivere dopo la fine delle stringhe cercate,
Non immediamente sotto, ma 3 righe sotto.
 
La zona del file dovrebbe essere una zona, non scritta!
 
 
 
Ciao
 
 
 

 
 
Questo è indifferente.
 
Tieni presente che spesso è più comodo (quando non è l'unica soluzione)
scrivere su un'altro file e rimouvere l'originale/rinominare il nuovo alla fine
del processo (cosa che ti garantisce in realtà anche un po' di protezione
in caso di errori in mezzo al processo).
 
Ciao!

fine del processo (cosa che ti garantisce in realt� anche un po' di


 
 
Ciao!