Come faccio ad inserire in un una lista tutte le righe di un file ???
Le Righe del File le Prendo con la fgets()
la struttura della lista e' questa...
codice:struct list_file { char *line; struct list_file *prev; struct list_file *next; };
Come faccio ad inserire in un una lista tutte le righe di un file ???
Le Righe del File le Prendo con la fgets()
la struttura della lista e' questa...
codice:struct list_file { char *line; struct list_file *prev; struct list_file *next; };
PoWered by:
Gentoo 1.5.3 - Kernel 2.6.7
Debian Sid - Kernel 2.6.7 - Bash 3.0
Slackware current - Kernel 2.6.7
Non ho ben capito cosa ti serve :master:Originariamente inviato da kNemo
Come faccio ad inserire in un una lista tutte le righe di un file ???
Le Righe del File le Prendo con la fgets()
la struttura della lista e' questa...
codice:struct list_file { char *line; struct list_file *prev; struct list_file *next; };
Vuoi sapere come si usa la funzione fgets? Come usare le liste?
Se (come ho capito io) cerchi invece il modo di procedere fai così:
Leggi una linea (finisce quando trovi '\n'), allochi un elemeno della lista se hai trovato qualche carattere, poi allochi il puntatore chiamato line e lo fai grosso quanto la dimensione della linea letta, quindi ci copi dentro il valore della linea...
Ripeti quindi tutto finchè raggiungi EOF...
Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00
Quello che hai capito tu e' giustissimo solo che non so' come si gestiscono i due puntatori prev e next...
codice:... if ((fp = fopen("mioFile", "rt")) == NULL) return (1); while (!feof(fp)) { fgets(buf, DIM_BUF, fp); // Alloca Elemento Lista... // Alloca Stringa nel Puntatore line della Lista... // Puntatore prev ??? // Puntatore next ??? } fclose(fp); ...
PoWered by:
Gentoo 1.5.3 - Kernel 2.6.7
Debian Sid - Kernel 2.6.7 - Bash 3.0
Slackware current - Kernel 2.6.7
ecco fatto!codice:#pragma warn -sus // i "Suspicious pointer conversion" scassano le balle... così li zittisci! #include <stdio.h> int main() { typedef struct list_file { char *line; struct list_file *prev; struct list_file *next; } *start, *current, *tmp; ... // altre dichiarazioni, apertura del file e quant'altro... if ((current=(list_file*) calloc(1, sizeof(list_file)))==NULL) { printf("\n\aErrore nell'allocazione della memoria!\n"); return(-1); } current->prev=NULL; current->next=NULL; start = (list_file*) current; while(!feof(fp)) { ... // leggi la riga (pare che i tuoi problemi non stiano qui, cmq se vuoi // qualche confronto chiedi pure) tmp = (list_file*) current; if ((current->next = (list_file*)calloc(1, sizeof(list_file))) == NULL) { printf("\n\aErrore nell'allocazione della memoria!\n"); return(-1); } current = (list_file*) current->next; current->next = NULL; current->prev = tmp; } current = start; // sorta di rewind della lista ... // elaborazione e tutto quanto... ... fclose(fp); ... // liberi la memoria allocata (se vuoi delle dritte chiedi pure) return(0); }
se vuoi chiarimenti posta posta posta!