|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
[C++] leggere file strutturato
ciao,
ho un file "strutturato" ricavato da una apparecchiatura che è formato da alcuni caratteri di controllo BEL/ESC e da caratteri ascii nel range, per intenderci, stampabili sullo schermo, insomma: ha una sorta di header. La prima idea che mi è venuta è stata quella di leggere 1 carattere alla volta e in presenza di un carattere di controllo, comportarsi di conseguenza. Il problema è che richede un certo numero di if(). Se non ricordo male, è possibile dichiarare un struttura e riempirla con una sola chiamata; ricordo male? Esempio di struttura: Codice:
struct misurazione
{
char NomeCostruttore[20];
char CaratteriDiControllo[2];
char NomeApparato[20];
char Data[20];
char AltraStringa[20];
};
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
grazie,
ho trovato la fread() che mi consente di leggere un certo numero di byte e riempire la struttura in base al suo sizeof(struct ...) Il caos ora è costruire la struttura nel modo corretto in quanto non ho documentazione disponibile. Codice:
struct misurazione
{
char NomeCostruttore[20];
char CaratteriDiControllo[2];
char NomeApparato[20];
char Data[20];
char AltraStringa[20];
};
struct misurazione input;
fread(&input, sizeof(struct misurazione), 1, fp);
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
Quello che mi interessa è una funzione che mi riempie i membri della mia struttura in funzione delle dimensioni dei suoi membri. struct persona { char nome[20]; char cognome[20]; int età; }; nel caso della struttura persone, con una sola chiamata la tal funzione dovrebbe assegnare i primi 20 byte del file al nome, i successivi 20 byte al cognome etc. Questa strada mi è sembrata la migliore in quanto se dovessero modificare il file, disallineando quindi qualche campo di qualche byte, mi basterebbe modificare la struttura per sistemare le cose e non toccare altro. p.s. se interessa a qualcuno http://faculty.winthrop.edu/dannelly..._record_IO.htm Ultima modifica di misterx : 30-01-2018 alle 11:21. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2017
Messaggi: 469
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
La mia idea è popolare una struttura in un qualche modo attraverso una funzione standard che la riempia; la fread, anche se pensata per leggere dati raw, potrebbe andarmi bene e qualche risultato lo sto vedendo. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
Totale byte da leggere=2+30+2+25=59 byte Se dichiaro una struttura del tipo: struct MiaStruct { char PrimiDueByte[2]; char PrimoDato[30]; char SecondiDueByte[2]; char SecondoDato[25]; } struct MiaStruct input; fread (&input, sizeof(struct MiaStruct), 1, infile); la fread(), per quale ragione non funzionerebbe? |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
si interponessi un int, non verrebbero letti 4 byte? esempio: struct MiaStruct { char PrimiDueByte[2]; char PrimoDato[30]; int PrimoDatoIntero; char SecondiDueByte[2]; char SecondoDato[25]; } struct MiaStruct input; fread (&input, sizeof(struct MiaStruct), 1, infile); alla fine dovrei leggere 63 byte, almeno credo. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
sei stato molto chiaro |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
per concludere, con la fread() potrei avere un disallineamento di bit e finire per leggere altri byte che nulla hanno a che vedere con l'informazione originaria, è corretto?
Credo cge se così fosse, dimostrerebbe perchè ci si trova in presenza di caratteri "spuri" durante la lettura di un file. Mi chiedevo anche: ma un file di testo in puro ascii non dovrebbe soffrire di disallineamenti di bit e quindi con la fread non dovrei mai avere il problema di caratteri spuri, o c'è dell'altro? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:56.




















