PDA

Visualizza la versione completa : [C] Lettura binaria di un file ed estrazione contenuti


luci89
17-03-2010, 22:44
Salve, mi hanno dato un file dal quale tramite un programma scritto in C devo estrapolare dei valori double per riempire un vettore bidimensionale. Il file inizia con 2 valori Boolean, poi 3 Long e poi continua con una sequenza di Double (quelli che servono a me) fino alla fine. Il file da quello che ho capito è scritto in binario infatti aprendolo col notepad vedo simboli strani... Devo usare quindi la lettura binaria? Che funzioni devo utilizzare per risolvere questo problema?

MItaly
17-03-2010, 22:59
Fondamentalmente devi usare la fread.

luci89
17-03-2010, 23:05
Come potrei fare? Perchè i primi 2 Boolean e i successivi tre Long li devo saltare...

MItaly
17-03-2010, 23:31
Usa la fseek per saltare i byte in questione; ricorda che puoi ottenere il numero di byte di un tipo usando l'operatore sizeof.

luci89
18-03-2010, 00:02
per esempio posso fare così?

FILE *pf = fopen("prova.dat", "rb");

if(pf==NULL)
return o;


fseek(pf, (sizeof(bool))*2 , SEEK_SET); //SEEK_SET indica di applicare l'offset a partire dall'inizio del file

fseek(pf, (sizeof(long int))*3, SEEK_CUR); //SEEK_CUR indica di applicare l'offset a partire dalla posizione corrente

oregon
18-03-2010, 00:06
Sì ... ma puoi semplicemente inserire tutto nella prima fseek

fseek(pf, sizeof(bool)*2 + sizeof(long int)*3, SEEK_SET);

luci89
18-03-2010, 00:08
Ok perfetto e ora come uso la fread() per iniziare a leggere i double? Grazie mille

oregon
18-03-2010, 00:10
La usi subito dopo la fseek

luci89
18-03-2010, 00:15
Ok ma non riesco a capire come funziona. Cioè ho visto che accetta 4 parametri.

fread(xxx ,sizeof(double), 1, pf )

al posto di xxx va un vettore? Come la devo usare? Scusate l'ignoranza

oregon
18-03-2010, 00:17
No ... se devi leggere una variabile double, ci vuole il puntatore a quella variabile ...

Leggi la documentazione quando hai dubbi

http://www.cplusplus.com/reference/clibrary/cstdio/fread/

Loading