PDA

Visualizza la versione completa : [C]Modifica di un file


contemax83
17-01-2010, 12:34
Salve a tutti e buona Domenica ,ho un altro quesito da porvi:
Ho un file strutturato nel seguente modo:

Descrizione:un qualcosa di max 100 caratteri\n
Costo:un intero o un float\n
Numero:un intero\n
Tempo:un tipo di file time\n

Ho aperto il file con una semplice fopen in "r+"
Come faccio a modificare ad esempio il campo costo,il campo numero e il campo tempo con un numero a mia scelta???

Grazie a tutti!!!

MItaly
17-01-2010, 12:37
L'unica modifica che puoi fare è sostituire dei caratteri (non aggiungerne arbitrariamente in mezzo); se vuoi fare delle modifiche che necessitano di aggiungere caratteri in mezzo al file devi riscrivere in un nuovo file tutto il file modificato e rimpiazzare il file vecchio con quello nuovo.

contemax83
17-01-2010, 12:41
Il mio scopo è questo:
Se il campo costo è uguale a 150,00 lo voglio modificare in 0;
cioè
costo:150,00 ----> costo:0
Non so come fare!!! :dhò:
Grazie della risposta tempestiva.

oregon
17-01-2010, 12:44
Come ti è stato detto, questo lo puoi fare perchè potresti sostituire a

150,00

il valore

000,00

Ma se devi sostituire al valore

150,00

il valore

2300,00

allora, dato che devi aggiungere dei caratteri, devi riscrivere il file.

Quindi, se quest'ultimo caso si puo' verificare, non ti rimane che questa soluzione: leggi il file, modifichi i valori, scrivi il nuovo file, cancelli il primo, rinomini il secondo.

contemax83
17-01-2010, 12:48
Ok,fin qui c sono!Il mio problema è come modificare i valori:posizionarsi sul valore da modificare e scrivere il nuovo valore in un file tipo quello postato prima!Grazie

MItaly
17-01-2010, 12:49
allora, dato che devi aggiungere dei caratteri, devi riscrivere il file.
... motivo per cui una volta erano diffusissimi i file binari con record a lunghezza fissa (a molti il codice


OPEN "NOMEFILE.DAT" FOR RANDOM AS #1
non suonerà nuovo... :zizi: )

oregon
17-01-2010, 12:50
Non ti devi posizionare da nessuna parte. Devi leggere il file e modificare *in memoria* il valore letto prima di riscriverlo.

oregon
17-01-2010, 12:50
Originariamente inviato da MItaly
OPEN "NOMEFILE.DAT" FOR RANDOM AS #1[/code]
non suonerà nuovo... :zizi: )

Infatti ... compresa la

FIELD #1, ....

per chi la ricorda ... :)

contemax83
17-01-2010, 12:55
Scusa la banalità..ma come si fa???? :D

apro il file in questo modo:


fp=fopen("nomefile","r+");


poi???

oregon
17-01-2010, 12:59
Dato che devi solamente leggere, apri con r
Apri anche il secondo file in lettura

Man mano che leggi i dati dal primo, con un ciclo, se ti serve li modifichi, e li riscrivi nel secondo file.

Saprai scrivere un loop per leggere tutti i dati dal primo file ...

Loading