PDA

Visualizza la versione completa : [C] Aggiunta su file di testo.


CRIz
10-01-2009, 10:06
Ciao a tutti, devo risolvere un semplice problema a cui non trovo però soluzione.
Ho questo file di testo: menu.txt così composto


Piatto KCalorie
pasta 1024
bistecca 1519
frutta 433
(piatto e KCalorie non ci sono nel file eh! :P )
devo aggiungere per ogni riga il prezzo, ovvero deve diventare così:


Piatto KCalorie Prezzo
pasta 1024 12
bistecca 1519 18
frutta 433 6
ovviamente il problema è che devo modificare le righe, non creare un nuovo file e rinnominarlo.
se apro il file modalità testo, e leggo le variabili di una riga con una
fscanf(fp,"%s %d",s,&d), riporto l'indicatore di posizione all'inizio della stessa riga, e la riscrivo con l'aggiunta:
fprintf(fp,"%s %d %d \n",s,d,12); la riga viene riscritta correttamente ma l'aggiunta mi sovrascrive caratteri della riga successiva..

Se apro il file in modalità append e lettura, riesco ad aggiungere testo nel file, ma soltano alla fine, nonostante sposti l'indicatore di posizione dove voglio..

Avete qualche idea?
Vi scrivo anche il testo dell'esercizio se vi è più utile: Leggere il file e stampare a video il menu dal main dopo la chiamata della funzione e riscriverlo modificato
con l’aggiunta per ogni riga del prezzo di vendita.

Grazie a tutti e scusate la lunghezza del post.

oregon
10-01-2009, 10:37
Devi ricreare il file e rinominarlo.

CRIz
10-01-2009, 10:38
devo modificare quello che ho. non posso ricrearlo.

oregon
10-01-2009, 10:41
Allora lo leggi tutto in memoria e lo riscrivi modificato.

CRIz
10-01-2009, 10:45
e riesco a rileggere le variabili poi?

oregon
10-01-2009, 10:46
Originariamente inviato da CRIz
e riesco a rileggere le variabili poi?

Cioe'? Che vuol dire?

CRIz
10-01-2009, 10:56
Originariamente inviato da oregon
Cioe'? Che vuol dire?

pasta è una stringa
1024 è int
12 è int

oregon
10-01-2009, 11:04
Originariamente inviato da CRIz
pasta è una stringa
1024 è int
12 è int

E quindi? Qual e' il problema?

Non hai detto che utilizzavi la

fscanf(fp,"%s %d",s,&d)

PeppePes88
10-01-2009, 11:12
ho provato a scriverlo ma per salvarmi tutto in memoria sono obbligato a usare dati dinamici come le code, perché a priori non so quanto so quanto è lungo il file...

CRIz
10-01-2009, 11:18
forse è proprio l'unica alternativa.
usare le liste, salvando tutti i dati e riscrivendo tutto il file interamente.

qualcuno ha qualche altra idea?

Loading