Vantaggi
A parte l’enorme semplicità e celerità di gestione
rispetto i file VRL (Variable Record Lenght), i file CRL costituiscono il metodo più sfruttato da moltissimi programmi
per la memorizzazione dati in quanto consentono sia un accesso diretto ad ogni record che la possibilità di modificarne il contenuto senza
particolari accorgimenti: queste sono caratteristiche imprescindibili per certi tipi di applicativi, quali i data base,
i programmi di contabilità, eccetera.
Come gestirli
Per quanto concerne la lettura di un record, si possono adottare varie tecniche.
Qui di seguito ne vengono spiegate alcune, ma è utile indicare che questo paragrafo
ha solo uno scopo propedeutico e non è quindi necessario
al fine dell’apprendimento del funzionamento della classe RecCLenMgr,
la quale viene illustrata più avanti.
La tecnica più semplice consiste in un loop ripetuto un numero di volte
pari alla lunghezza del record, il quale contenga al suo interno questo frammento di codice:
*buffer ++ = getc( file ) ;
che si occupa di prelevare tutti i caratteri del record mettendoli in un buffer
di tipo char[]. Successivamente il programma si occuperà di suddividere il buffer nei suoi vari campi.
Più impegnativo, ma estremamente più in stile C/C++, possiamo ideare
una funzione che agisca in modo parametrizzato, creando:
-
un array di int contenente le lunghezze dei singoli campi da estrarre;
-
tutti i vari char[] costituenti i campi veri e propri, dichiarandoli
di lunghezza pari a quella prevista per il campo incrementata di uno per permettere
l’inserimento del NULL in coda al fine di ottenere una semplificazione nella gestione dei campi
(si possono così adoperare tutte le funzioni relative alle stringhe e quelle di trasformazione di stringa in numero).
-
un array di char* che puntano ai vari campi dichiarati come sopra descritto;
si passa poi ad eseguire un loop ripetuto tante volte quanti sono i campi,
il quale estrae un numero di caratteri come specificato nel relativo array,
avvalorando direttamente il campo di destinazione individuato
tramite l’n-esimo elemento dell’array dei puntatori.
Al termine dell’estrazione di ogni singolo campo si accoda il carattere NULL.
È da tenere presente che il record può avere il terminatore record: in questo caso,
al termine del loop di estrazione del record, è necessario estrarre anche il terminatore.
Se non viene fatto, alla successiva lettura, il primo campo conterrà al suo inizio il terminatore record
e tutti i successivi campi conterranno come primi caratteri quelli che sarebbero in realtà gli ultimi del campo precedente;
quest’errore si amplificherebbe poi di record in record.