|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
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
__________________
Il mio case prima della "cura" --> Il mio case...dopo! .oO (Firefox Myths) Myths Oo. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
C'è la funzione fgets
![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Quote:
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);
__________________
Il mio case prima della "cura" --> Il mio case...dopo! .oO (Firefox Myths) Myths Oo. |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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... Codice:
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 } Codice:
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 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Scusa volevo dire che voglio eliminare il \n, devo sostituirlo con il \0? O posso lasciare come avevo fatto?
__________________
Il mio case prima della "cura" --> Il mio case...dopo! .oO (Firefox Myths) Myths Oo. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...va bene come hai fatto per togliere lo \n, ma come ho fatto io è più semplice ed efficiente...
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:34.