Oppure

Loading
15/05/11 16:29
Peppe91
Salve a tutti ragazzi!
Vorrei sapere come è possibile salvare una lista lineare su file. Mi spiego meglio, sto creando un programmino tiporubrica tramite liste. Inserimento contatti in ordine alfabetico, ricerca contatti, eliminazione contatti ecc... Il problema è che quando faccio l'output su file, l'ordine alfabetico "scompare" e inserisce tutto in coda. Come se non mi considerasse l'ordinamento (che su schermo funziona perfettamente). Ad esempio se inserisco giuseppe e poi antonio, su schermo ovviamente mi inserisce in lista prima antonio e poi giuseppe...su file prima giuseppe e poi antonio. cOme posso fare?
aaa
15/05/11 17:10
Bonny
Se la lista è ordinata non dovrebbero esserci prob.. implementando una funzione del tipo

.....apro il file in modalita scrittura......
while(node != NULL){
fprintf(puntatore a file, format string, node->variabili ecc...);
node = node->next;
}
..........chiudo il file......
cmq se ti può aiutare:
pierotofy.it/pages/sorgenti/dettagli/18720-Gestione_liste_e_file_binari/
Ultima modifica effettuata da Bonny 15/05/11 17:13
aaa
15/05/11 20:47
Peppe91
Si ma infatti la lista è già ordinata, xchè appena inserisco un nuovo nome me la ordina automaticamente in ordine alfabetico. Mi spiego meglio:
Situazione iniziale: lista vuota.
Inserisco un nominativo: ok, lo inserisco in lista e faccio l'output su file
Inserisco un altro nominativo, ok, lo inserisco in lista e mi faccio stampare a schermo in modo da assicurarmi che sia disposto in ordine alfabetico. Ed è così. Però su file, non me lo stampa in ordine alfabetico, ma lo accoda al precedente.

Esempio, se inserisco Giuseppe e Antonio, a schermo compare la lista ordinata, Antonio e poi Giuseppe. Ma su file Giuseppe e poi Antonio!
aaa
16/05/11 9:35
Bonny
è ovvio che sia cosi perchè fai un append sul file ...
si ma che te frega dei come i dati vengono scritti sul file, per esempio sulla funzione "visualizza rubrica" che farai sicuramente.. quando vai a leggere i "record" dal file crei una lista ordinata e all'utente fai visualizzare la lista corrente!!!
Poi se ti interessa salvare i dati ordinati anche nel file io farei cosi:
-apro il file in modalità lettura (r)
-creo la lista (ordinanta)
-chiudo il file
-aggiungo il nuovo nodo alla lista, ovviamente rispettando il protocollo di ordinamento
-apro il file in modalità scrittura (w)
-scrivo gli elementi della lista (nb il file viene sovrascritto)
-chiudo il file

secondo me questa è una scorciatoia per non usare le varie funzioni della libreria stdio.h; per esempio fseek() ecc..
però è poco sicura e poco professionale perchè se al momento della scrittura (punto 6) viene a mancare l'alimentazione alla macchina perdiamo tutto:)
aaa
16/05/11 13:12
Peppe91
eh si avevo pensato pure io di fare così. Adesso provo. Comunque potrei anche inserire tutta la rubrica, effettuare tutte le operazioni possibili e poi al momento della chiusura del programma far fare l'output su file in modo da salvare tutto
aaa
19/05/11 18:49
Peppe91
Postato originariamente da Bonny:

è ovvio che sia cosi perchè fai un append sul file ...
si ma che te frega dei come i dati vengono scritti sul file, per esempio sulla funzione "visualizza rubrica" che farai sicuramente.. quando vai a leggere i "record" dal file crei una lista ordinata e all'utente fai visualizzare la lista corrente!!!
Poi se ti interessa salvare i dati ordinati anche nel file io farei cosi:
-apro il file in modalità lettura (r)
-creo la lista (ordinanta)
-chiudo il file
-aggiungo il nuovo nodo alla lista, ovviamente rispettando il protocollo di ordinamento
-apro il file in modalità scrittura (w)
-scrivo gli elementi della lista (nb il file viene sovrascritto)
-chiudo il file

secondo me questa è una scorciatoia per non usare le varie funzioni della libreria stdio.h; per esempio fseek() ecc..
però è poco sicura e poco professionale perchè se al momento della scrittura (punto 6) viene a mancare l'alimentazione alla macchina perdiamo tutto:)



Niente, nn funziona...è complicato sto fatto. Devo rifletterci meglio. Qualcuno ha altre idee?
aaa
21/05/11 12:37
ElCobra91
Puoi postare il codice?
aaa
21/05/11 20:28
Peppe91
No ma non è un problema di codice. A scrivere me lo scrive bene. Adesso ho bisogno di un'idea di come far leggere tutto. Xchè quando scrivo una struttura su file i puntatori, dopo la lettura, non hanno lo stesso valore.
aaa