File I record I record Il record è una struttura dati che contiene informazioni di tipo diverso o eterogenee. Fino a questo momento abbiamo trattato variabili di memoria, strutture dati (vettori e matrici, liste, pile code ect.) atte a contenere dati di tipo omogeneo. Ovviamente le strutture dati che contengono dati di tipo omogeneo non ci permettono di risolvere al meglio i molteplici problemi che dobbiamo trattare e automatizzare. Tracciato record La struttura dati che serve a contenere dati di un oggetto complesso e detta Record in inglese record significa registrazione. Per rappresentare un record accorre stabilire , quali sono le unità elementari che lo compongono , i campi e le caratteristiche, si definisce così il tracciato record. Per ogni campo si dovrà indicare : Nome Tipo Il tracciato record ACQUISTI (ipotizzando un record sugli acquisti di merci ) sarà graficamente rappresentato : Nome record : acquisti CODICE_ ART DESCRIZ QUANT PU AL ALFA(5) ALFA(30) NUM NUM NUM Un record viene definito in VB come una struttura dati e la descrizione deve iniziare con la parola TYPE. PUBLIC TYPE ACQUISTI CODICE_ART as string *5 DESCRIZ as string*30 QUANT as integer PU as currency AL as byte END TYPE PUBLIC MERCI AS ACQUISTI poiché col TYPE definiamo solo la struttura dati è necessario definire una variabile il cui tipo è la struttura dati Altro metodo per dichiarare il record TYPE ACQUISTI CODICE_ART as string *5 DESCRIZ as string*30 QUANT as integer PU as currency AL as byte END TYPE PUBLIC MERCI AS ACQUISTI Dichiarazione in VB in VISUAL BASIC la descrizione di una struttura dati di tipo record deve essere dichiarata a livello di modulo. All’interno del programma Visual Basic i campi del record verranno identificati con l’identificatore della variabile di tipo record e con l’identificatore di campo separato da un punto : ES. MERCI.CODICE_ART, MERCI.DESCRIZ Quando occorre accedere a più campi dello stesso record per inserire valori nei campi o per visualizzarne il contenuto, è utile usare l’istruzione WITH Esempio di codice WITH MERCI .CODICE_ART .DESCRIZ .QUANT .PU .AL END WITH I file di dati Archiviazione dei dati I file Il termine file stà ad indicare tutto ciò che può essere registrato su memoria di massa. abbiamo lavorato con variabili di memoria, strutture dati (vettori , matrici, array di record ) i cui dati risiedevano in memoria centrale e non potevano essere riutilizzati per successive elaborazioni. Le informazioni all’interno dell’archivio sono organizzate in RECORD (o struttura dati) e all’interno del record l’informazione è suddivisa in CAMPI ed ancora i campi possono essere suddivisi in SOTTOCAMPI (o unità elementari del record). Possiamo dire che il FILE è un’insieme di record legati da un nesso logico, nel senso di informazioni organizzate in un archivio. Il file è quindi una struttura di dati che realizza concretamente nella memoria di massa la struttura di tabella definite in M.C. (memoria centrale) File fisici e file logici Il concetto di file può essere analizzato a due livelli diversi : Logico fisico File logico Inizio del file 1° record Fine del file 2° record 3° record n° record A livello software del programmatore, un file logico è una sequenza di record (registrazioni) logici File fisico A livello hardware delle memorie di massa, un file fisico è una sequenza Di bit memorizzati su supporti di memoria tramite opportune Tecnologie (ottiche, magnetiche, ecc…) Il programmatore Deve occuparsi dell’aspetto software Tutte le procedure per passare dal file logico a un archivio fisico su disco, sono inserite in modo automatico dal compilatore linker Che richiama opportune procedure e funzioni del S.O. , esattamente del FILE SYSTEM File ad organizzazione sequenziali L’organizzazione sequenziale. Questa organizzazione è usata per archivi di piccole dimensioni. Nei file sequenziali i dati vengono inseriti uno di seguito all’altro (sequenziale) il ritrovamento dei record avviene allo stesso modo , scandendo i record dal primo fino alla fine del file. Operazioni fondamentali Le operazioni fondamentali da fare sugli archivi sono : Creazione /inserimento (scrittura sul file ) Lettura di record (questa operazione precede quella di modifica) Modifica Riscrittura Cancellazione (logica) Operazioni accessorie Le operazioni accessorie possono essere svariate a seconda delle esigenze della realtà che si vuole automatizzare : Stampe di diverso tipo Visualizzazioni di diverso tipo Varie elaborazioni Operazione di apertura stabilisce il collegamento fra la MC (memoria centrale) e il file registrato su disco o memoria di massa. In MC al momento dell’apertura del file viene riservata una zona BUFFER utilizzata per le operazioni di input/output nella tabella dei descrittori dei file sono memorizzate le informazioni per accedere ai blocchi fisici del disco che contengono i dati. L’operazione di apertura deve precedere qualsiasi altra operazione Apertura del file in VB In VB l’istruzione per l’apertura del flusso è la seguente : OPEN percorso/nomefile FOR (output/input/append) AS numerofile [len = dimensione buffer] I parametri inseriti fra parentesi quadre sono opzionali ES. open “a:\Ivdp\acquisti.dat” for output as #1 L’operazione di apertura si è detto precede tutte le altre, quando il file Viene aperto si verificano le seguenti azioni : Viene controllato se il file esiste, in caso contrario se ne crea uno nuovo nel percorso specificato viene creato un’ area Buffer in MC . quando l’area Buffer è satura i record vengono fisicamente scaricati nel disco è cioè all’interno dell’archivio. Viene creato un puntatore di file impostato all’inizio del file sia per la modalità di apertura Il Buffer è un’area di memoria temporanea dove vengono memorizzati i record INPUT OUTPUT tranne per la modalità APPEND dove il puntatore punta alla fine del file. Il puntatore viene sempre aggiornato per indicare la sua posizione corrente nel file Al file viene assegnato un numero di file (# 1) per potervi fare riferimento. A ciascun file usato nel progetto deve poter essere assegnato un numero di file univoco. Dopo che il file è stato chiuso, quel numero può essere assegnato a un altro file . I numeri di file ammessi sono da 1 a 511. Con l’apertura si definisce anche il tipo di organizzazione dell’archivio. Operazione di chiusura del file Con l’operazione di chiusura del file si chiude il collegamento tra la MC ( esattamente dell’area Buffer e si libera lo spazio occupato) e la memoria di massa che contiene il file di dati. L’istruzione usata è la : CLOSE numerofile (o l’elenco di più file da chiudere separati dalla virgola) ES: close #1 Operazioni Operazioni fondamentali Operazione di scrittura Con questa operazione trasferiamo sulla memoria di massa i dati presenti in MC. Le modalità di apertura del file per la scrittura sono 2 : OUTPUT APPEND Apertura in modalità OUTPUT Con la modalità output viene creato un nuovo file di dati. Se il file esisteva i dati precedentemente inseriti vengono persi e vengono inseriti i nuovi record. Questo tipo di apertura si dice distrugga il contenuto precedente del file, pertanto viene generalmente utilizzato per azzerare l’archivio. Modalità di apertura in Append Con la modalità append i record vengono inseriti in coda a quelli esistenti. il puntatore si trova nella fine del file se nell’archivio sono presenti altri record si trova all’inizio del file se stiamo facendo il primo inserimento Questa modalità di apertura ci permette di creare si l’archivio ma anche di fare nuovi inserimenti. Con i tipi di apertura (output/append) utili per la scrittura di record attiviamo il collegamento fra MC e memoria di massa le istruzione che permettono il trasferimento dei dati dalla MC alla memoria di massa sono Write Print L’istruzione print è la seguente : PRINT # numerofile, dato numerofile identifica il file su cui scrivere attraverso il numero assegnato con l’istruzione open dato indica il nome contenente il campo da registrare ES. riferendoci al record definito in precedenza possiamo scrivere la seguente istruzione : print #1,merci.codice_art, merci.descriz, merci.quant, merci.pu, merci.al Istruzione write L’istruzione write (quella che si consiglia di usare ) è la seguente : Write #numerofile, campo1,campo2 , campo3 ect. 1) numerofile identifica il file su cui scrivere attraverso il numero assegnato con l’istruzione open 2) campo1,campo2,campo3 indica il nome contenente il campo da registrare ES. riferendoci al record definito in precedenza possiamo scrivere la seguente istruzione write : write #1,merci.codice, merci.descriz, merci.quant, merci.pu, merci.al Lettura dei dati Per la lettura dei dati registrati all’ interno dell’archivio utilizziamo le seguenti istruzioni : line input # In fase di lettura i record registrati tramite print # vengono letti dal file tramite line input # ES: line input # numerofile, campi input # In fase di lettura i record registrati tramite write # vengono letti dal file tramite input # ES: input # 1, campo1,campo2,campo3 ect.. Sappiano che nell’accesso sequenziale i dati (record) vengono registrati uno di seguito all’altro la lettura avverrà nello stesso ordine di inserimento fino alla fine del file. Occorre inserire nell’operazione di lettura un controllo sulla fine del file , tale controllo viene svolto dalla funzione EOF() (end of file) che ha come argomento il numero del file, assume il valore TRUE appena viene raggiunta la fine del file. Il ciclo di lettura deve essere implementato tramite la struttura iterativa o DO WHILE o LOOP UNTIL. Diagrammi di flusso È un metodo grafico per rappresentare e schematizzare il processo di elaborazione Per l’operazione di scrittura dati o record (tastiera) Dati in input (Memoria centrale) Programma in elaborazione monitor stampante Archivio dati Per l’operazione di lettura record (tastiera) Dati in input (Memoria centrale) Programma in elaborazione monitor stampante Archivio dati Per l’operazione di riscrittura o modifica dei record (Memori centrale) (tastiera) Dati in input Programma in elaborazione monitor stampante Archivio dati