PDA

Visualizza la versione completa : [c] lettura da file


esoni
25-03-2011, 22:05
ciao ragazzi ho un file d questo formato
marco:rossi:5433

michele:mattei:5433
matteo:pino:43222


devo leggere iterivatamente dal file stringhe del tipo s=nome:cognome:matricola(sono separate dal /n) e darle in pasta a una funzione
ELABORA(char *s) //ignorato lo scopo di elabora.
il problema è che nel file ci possono essere righe vuote come nell esempio.
io avevo pensato a una fgets pero c è il problema che mi mette nella stringa anche il newline e io nn ce lo voglio .. ecco come l avevo pensata io(a posto di elabora ho messo una stampaaffiancata al * per capire se stampa anche il new line... APPlicato al file che ho messo all inizio come esempio.



int main(){
FILE *f=fopen("lista","r");
char *s=malloc(100*sizeof(char));
s=fgets(s,99,f);
while(s!=NULL)
{

printf("%s*",s);
s=fgets(s,99,f);
}


}


come output m da
marco:rossi:5433
*
*michele:mattei:5433
matteo:pino:43222
*


mentre io vorrei
marco:rossi:5433*michele:mattei:5433*matteo:pino:4 3222


come faccio ad evitare il new line ed evitare righe vuote?

MisterBean
26-03-2011, 12:36
Puoi aggiungere un controllo nel while in cui cerchi nella stringa il carattere \n e se lo trovi ci sostituisci il terminatore di stringa...

EDIT: Per le righe vuote puoi effettuare un altro controllo dopo il precedente che verifica che la stringa non abbia lunghezza nulla, prima di stamparla o di lavorarci sopra.

YuYevon
26-03-2011, 12:44
Volendo puoi usare anche semplicemente la fscanf()



while (! feof(f)) {
if (fscanf(f, "%s", s) == 1) {
printf("%s*", s);
}
}


se hai la garanzia di non avere righe più lunghe dello spazio che hai allocato per s.

Tra le altre cose, perché ricorri all'allocazione dinamica se poi allochi un numero costante di elementi? Inoltre aggiungerei dei controlli sia di corretta apertura sullo stream f che di corretta allocazione sul puntatore s (se proprio vuoi ricorrere all'allocazione dinamica, pur essendo inutile in quel caso).

alka
26-03-2011, 18:44
Originariamente inviato da esoni
ciao ragazzi ho un file d questo formato


Ne stai già parlando in questa discussione (http://forum.html.it/forum/showthread.php?s=&threadid=1453220): non aprire più thread sullo stesso argomento.

Loading