Parte ii - IIS Marconi Latina - Area didattica

Parte ii - IIS Marconi Latina - Area didattica Parte ii - IIS Marconi Latina - Area didattica

iismarconi.net
from iismarconi.net More from this publisher
24.01.2014 Views

986 volume V Programmazione Quando la scrittura avviene con successo, il contenuto del record non è più disponibile in memoria, a meno di averne una copia per altri motivi (per esempio a causa dell’utilizzo dell’opzione ‘FROM’). La scrittura di un file organizzato in modo sequenziale implica l’utilizzo del primo schema sintattico. Nello schema sintattico non è previsto il controllo di alcuna condizione di errore, che comunque potrebbe verificarsi, quando per qualche ragione non è possibile scrivere nel file. Le opzioni ‘AFTER ADVANCING’ e ‘BEFORE ADVANCING’, servono rispettivamente per richiedere un avanzamento preventivo o successivo alla scrittura. Per un file di dati, non ha significato l’uso di tali opzioni, che invece servono precisamente per la stampa, o per la creazione di file di testo (destinati eventualmente alla stampa). L’avanzamento può essere specificato in un numero intero di righe (identifier-2 o integer-1), oppure richiedendo un salto pagina, con la parola chiave ‘PAGE’. Il nome mnemonico che può essere indicato in alternativa alla parola chiave ‘PAGE’ può servire per attribuire un nome alternativo proprio alla parola ‘PAGE’, oppure a fare riferimento a un’altra parola chiave (alternativa a ‘PAGE’), che si riferisce a caratteristiche speciali, legate alla stampa, che il proprio compilatore può gestire. Si osservi che un file organizzato in modo sequenziale, per il quale abbiano senso le opzioni di avanzamento, è bene che sia stato dichiarato con l’opzione ‘LINE SEQUENTIAL’. Il secondo schema sintattico può essere usato per i file che non hanno un’organizzazione sequenziale. In questo caso vengono a mancare i controlli di avanzamento della riga o della pagina, ma si aggiunge la verifica di un errore di scrittura, attraverso l’opzione ‘INVALID KEY’, dopo la quale appaiono le istruzioni da eseguire in caso di problemi. Nel caso di file organizzati in modo relativo, ad accesso sequenziale, il comportamento è lo stesso che si avrebbe con un file sequenziale puro e semplice, con la differenza che la variabile designata a contenere il numero del record viene impostata automaticamente e che si può verificare la condizione controllata dall’opzione ‘INVALID KEY’ se si tenta di espandere il file oltre i limiti imposti esternamente al programma. Se invece questo tipo di file viene usato con un accesso diretto o dinamico, il numero del record (inserito nella variabile definita con la dichiarazione ‘RELATIVE KEY’ dell’istruzione ‘SELECT’ del file stesso) deve essere indicato espressamente: se il numero indicato corrisponde a un record già esistente, oppure se si tenta di scrivere oltre i limiti stabiliti esternamente al programma, si ottiene la condizione di errore controllata dall’opzione ‘INVALID KEY’. Nel caso di file organizzati a indice, l’inserimento dei record avviene tenendo conto delle chiavi previste per questo. In linea di principio, le chiavi non devono essere doppie; pertanto, il tentativo di inserire un record che contiene una chiave già esistente nel file (primaria o secondaria che sia), provoca un errore che può essere controllato attraverso l’opzione ‘INVALID KEY’. Naturalmente, se nella dichiarazione delle chiavi è stato stabilito che possono anche essere doppie, tale errore non si verifica e la scrittura avviene con successo. Un file organizzato a indice può essere scritto utilizzando un accesso sequenziale, ma in tal caso, la scrittura deve avvenire rispettando l’ordine crescente della chiave primaria, altrimenti si verifica un errore che si può controllare con l’opzione ‘INVALID KEY’.

Manuale COBOL 987 L’utilizzo dell’istruzione ‘WRITE’ implica l’aggiornamento della variabile che rappresenta lo stato del file (‘FILE STATUS’). 82.13 Riordino e fusione Il riordino e la fusione del contenuto dei file sono gestite normalmente attraverso funzionalità speciali del linguaggio COBOL. Si utilizzano in particolare file dichiarati con l’indicatore di livello ‘SD’ nella sezione ‘FILE SECTION’, per svolgere la funzione di riordino o di fusione, mentre i file da ordinare o da fondere, assieme al risultato dell’ordinamento o della fusione, possono essere file normali organizzati secondo le esigenze del programma. I file che prendono parte alle operazioni di riordino e di fusione, non devono essere aperti o chiusi durante tali operazioni. 82.13.1 Riordino Il riordino di un file, con l’istruzione ‘SORT’ del COBOL, richiede in linea di massima il coinvolgimento di tre file: il file che formalmente serve come appoggio per svolgere la funzione di ordinamento, dichiarato nella sezione ‘FILE SECTION’ con l’indicatore di livello ‘SD’; un file per i dati in ingresso da ordinare; un file per accogliere il risultato del procedimento di ordinamento. « « Il file che nello schema sintattico appare nominato come file-name-1, è quello che deve essere dichiarato nella sezione ‘FILE SECTION’ con l’indicatore di livello ‘SD’. Dopo la parola ‘ASCENDING’ si indica un elenco di chiavi di ordinamento crescenti; dopo la parola ‘DESCENDING’ si indica un elenco di chiavi di ordinamento decrescenti. Le chiavi di ordinamento sono campi del record del file file-name-1 e la possibilità di indicare più chiavi serve a definire una gerarchia di ordinamento quando se ne crea la necessità. In pratica, la presenza di più chiavi fa sì che in presenza di chiavi doppie a un certo livello gerarchico, permetta di distinguere l’ordine dei record utilizzando anche le chiavi di livello inferiore. Nell’ordinamento di un file, la presenza di record con tutte le chiavi previste doppie, ha l’unico inconveniente di non poter stabilire quale sequenza effettiva ottengono tali record dopo l’ordinamento.

986 volume V Programmazione<br />

Quando la scrittura avviene con successo, il contenuto del record non è più disponibile in<br />

memoria, a meno di averne una copia per altri motivi (per esempio a causa dell’utilizzo<br />

dell’opzione ‘FROM’).<br />

La scrittura di un file organizzato in modo sequenziale implica l’utilizzo del primo schema sintattico.<br />

Nello schema sintattico non è previsto il controllo di alcuna condizione di errore, che<br />

comunque potrebbe verificarsi, quando per qualche ragione non è possibile scrivere nel file. Le<br />

opzioni ‘AFTER ADVANCING’ e ‘BEFORE ADVANCING’, servono rispettivamente per richiedere<br />

un avanzamento preventivo o successivo alla scrittura. Per un file di dati, non ha significato<br />

l’uso di tali opzioni, che invece servono precisamente per la stampa, o per la creazione di file di<br />

testo (destinati eventualmente alla stampa). L’avanzamento può essere specificato in un numero<br />

intero di righe (identifier-2 o integer-1), oppure richiedendo un salto pagina, con la parola<br />

chiave ‘PAGE’. Il nome mnemonico che può essere indicato in alternativa alla parola chiave<br />

‘PAGE’ può servire per attribuire un nome alternativo proprio alla parola ‘PAGE’, oppure a fare<br />

riferimento a un’altra parola chiave (alternativa a ‘PAGE’), che si riferisce a caratteristiche<br />

speciali, legate alla stampa, che il proprio compilatore può gestire.<br />

Si osservi che un file organizzato in modo sequenziale, per il quale abbiano senso le opzioni<br />

di avanzamento, è bene che sia stato dichiarato con l’opzione ‘LINE SEQUENTIAL’.<br />

Il secondo schema sintattico può essere usato per i file che non hanno un’organizzazione sequenziale.<br />

In questo caso vengono a mancare i controlli di avanzamento della riga o della<br />

pagina, ma si aggiunge la verifica di un errore di scrittura, attraverso l’opzione ‘INVALID<br />

KEY’, dopo la quale appaiono le istruzioni da eseguire in caso di problemi.<br />

Nel caso di file organizzati in modo relativo, ad accesso sequenziale, il comportamento è lo<br />

stesso che si avrebbe con un file sequenziale puro e semplice, con la differenza che la variabile<br />

designata a contenere il numero del record viene impostata automaticamente e che si può<br />

verificare la condizione controllata dall’opzione ‘INVALID KEY’ se si tenta di espandere il file<br />

oltre i limiti imposti esternamente al programma. Se invece questo tipo di file viene usato<br />

con un accesso diretto o dinamico, il numero del record (inserito nella variabile definita con la<br />

dichiarazione ‘RELATIVE KEY’ dell’istruzione ‘SELECT’ del file stesso) deve essere indicato<br />

espressamente: se il numero indicato corrisponde a un record già esistente, oppure se si tenta<br />

di scrivere oltre i limiti stabiliti esternamente al programma, si ottiene la condizione di errore<br />

controllata dall’opzione ‘INVALID KEY’.<br />

Nel caso di file organizzati a indice, l’inserimento dei record avviene tenendo conto delle chiavi<br />

previste per questo. In linea di principio, le chiavi non devono essere doppie; pertanto, il<br />

tentativo di inserire un record che contiene una chiave già esistente nel file (primaria o secondaria<br />

che sia), provoca un errore che può essere controllato attraverso l’opzione ‘INVALID<br />

KEY’. Naturalmente, se nella dichiarazione delle chiavi è stato stabilito che possono anche<br />

essere doppie, tale errore non si verifica e la scrittura avviene con successo.<br />

Un file organizzato a indice può essere scritto utilizzando un accesso sequenziale, ma in<br />

tal caso, la scrittura deve avvenire rispettando l’ordine crescente della chiave primaria,<br />

altrimenti si verifica un errore che si può controllare con l’opzione ‘INVALID KEY’.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!