File ad accesso casuale o random La principale differenza tra i file sequenziali e i file ad accesso casuale è che in un file ad accesso casuale è possibile leggere e scrivere i dati in qualsiasi ordine. Con i file sequenziali è sempre necessario partire dall’inizio del file e procedere in ordine con la scansione attraverso il file.
I file Random offrono maggiore velocità e la capacità di accedere ai dati in base al numero di record . Con questa organizzazione ogni record viene registrato ed identificato in base ad un numero progressivo di record. Ogni record pertanto può essere letto o scritto senza accedere ai record precedenti. I record all’interno dell’archivio sono di lunghezza fissa
Operazioni sui file Le operazioni che possiano fare sono : inserimento lettura modifica cancellazione : logica fisica
Dichiarazione del struttura dati record La dichiarazione del record avviene come per i file sequenziali a livello di modulo : type merci codice as string *5 prodotto as string * 20 prezzoun as currency quantità as integer end type public prodotti as merci definiamo una variabile col nome prodotti che prenderà il tipo della struttura record di nome merci.
Funzioni Per la gestione dei file random è necessario avvalersi di alcune funzioni predefinite del V.B. : len : restituisce il numero di caratteri presenti in una stringa o nel nostro caso in un record es : lr = len(prodotti) freefile : restituisce il primo numero di file disponibile da utilizzare con la open. Questa funzione si utilizza quando si devono gestire più archivi
Lof (length of file) : restituisce la dimensione in byte del file aperto con la open . Dividendo la lunghezza totale in byte del file per la lunghezza del record otteniamo il numero di record registrati in archivio ( la divisione si fa con l’operatore \ di divisione fra interi ) seek : utilizzata quando è necessario stabilire la posizione del puntatore all’interno del file, la funzione restituisce la posizione del record successivo nel file. La sintassi è la seguente : seek(numerofile) oppure posizione = seek(1)
Apertura di un file Un file random deve essere aperto in modalità random per tutte le operazioni che dobbiamo compiere sul file sia lettura che scrittura e riscrittura. La sintassi è la seguente : open nomepercorso [for random] as numerofile len = lunghezzarecord
esempio :. open “c:\5dp\magazzino. dat” [for random] as 1 esempio : open “c:\5dp\magazzino.dat” [for random] as 1 len=prodotti con tale istruzione il file è aperto per compiere qualsiasi operazione (lettura, scrittura, modifica) for random è posto fra parentesi quadre poichè si può anche ometterlo, cioè viene riconosciuta automaticamente la modalità random
Operazione di scrittura L’operazione di scrittura sul un file ad A.R. viene eseguita con l’struzione PUT, la sintassi è la seguente : put #numerofile, posizione ,nomerecord la posizione viene calcolata come già visto con questa formula usando le funzioni preelencate posizione =LOF(1) \ LEN(prodotti) per aggiungere un nuovo record, alla funzione numero dei record si aggiunge un’unità in più
Operazione di lettura L’operazione di lettura sul un file ad A.R. viene eseguita con l’struzione GET , la sintassi è la seguente : get #numerofile, posizione ,nomerecord la posizione è data in input o calcolata
Modifica di un record per modificare record già esistenti si devono eseguire i seguenti passi individuare il numero del record da modificare fornire i nuovi valori per i campi utilizzare l’istruzione put per la riscrittura specificando la posizione del record
Cancellazione logica di un record Per cancellare logicamente record si procede in questo modo : individuare il numero del record da cancellare contrassegnare un campo del record con un carattere particolare esempio il campo codice con : “*****” utilizzare l’istruzione put per la riscrittura specificando la posizione del record
Cancellazione fisica La cancellazione fisica si attua attraverso questi passi: si crea un file destinazione avente la stessa struttura record del file origine leggendo sequenzialmente il file origine si copiano nel file destinazione tutti i record che devono essere mantenuti nel file alla fine si chiudono i due file e si cancella il file origine con l’istruzione Kill si rinomina il file assegnando il nome del file origine rimosso