View Full Version : Banalmente file in C
Ragazzi qualcuno mi ha detto che con la fopen e fread e' possibile leggere nei file di testo una linea alla volta, ma a me sembra che la fread accetti un numero di caratteri da leggere e quante volte questo numero di caratteri voglio leggere, ma non c'e' niente che parli di linea...come posso fare?
Il problema e' banale, ma non ho molto tempo per guardarci...
Thanx
Originally posted by "cionci"
C'è la funzione fgets :)
Grande ecco come si chiamava!
Ma alcune cose:
1) la fgets legge fino al primo \0, pero' vuole anche un numero massimo di caratteri da leggere (dove lui sottrae 1), io ci ho messo un numero alto cosi' sicuramente fa prima a trovare il \0 ho fatto bene?
token2=fgets(token2,MAXSIZE,filefd);
2) Per cancellare invece token2 da eventuali stringhe rimaste da un giro precedente di un ciclo faccio cosi'...fa schifo?
strncpy(token1,"",MAXSIZE);
3) Per cancellare il \0 ho invece fatto cosi'...dite che c'e' un modo migliore?
strncpy(token1,token2,strlen(token2)-1);
Perchè vuoi cancellare lo \0 ?!?!?! Una stringa non è più una stringa se ci togli lo \0... Comunque legge fino allo \n...
Ecco come puoi fare per gestire le letture parziali...
char buf[MAXSIZE];
int n, i;
while(fgets(buf,MAXSIZE,fd))
{
n = strlen(buf);
if(buf[n-1] != '\n')
{
//lettura parziale
}
//lettura avvenuta completamente
buf[n-1] = '\0'; //per togliere lo \n in fondo
//qui fai le tue cose
}
Ora...la gestione della lettura parziale dipende esclusivamente da quello che vuoi cercare nel file di testo...se vuoi cercare parole puoi mettere una cosa del genere sotto il comemnto "lettura parziale":
for(i=n-1; i>0; --i)
if(isspace(buf[i])) //cerca uno spazio o un tab
break; //esce dal for
if(i <= 0)
{
//è una situazione di errore, una parola intera
//non può essere contenuta nel buffer
return -1;
}
//ora mando indietro il file all'inizio della parola che non è
//entrata nel buffer
fseek(filed, -(n-i+1), SEEK_CUR); //si muove all'inzio della parola rimasta a metà
n = i+1; //in questo modo il codice successivo troncherà la stringa dove
//abbiamo trovato lo spazio
Scusa volevo dire che voglio eliminare il \n, devo sostituirlo con il \0? O posso lasciare come avevo fatto?
Sì...va bene come hai fatto per togliere lo \n, ma come ho fatto io è più semplice ed efficiente...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.