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

970 volume V Programmazione « 82.12.17 Istruzione «REWRITE» L’istruzione ‘REWRITE’ consente si sovrascrivere un record logico all’interno di un file, purché questo risieda all’interno di un’unità che consente un accesso diretto ai dati (le unità sequenziali come i nastri sono escluse). Per utilizzare l’istruzione ‘REWRITE’ il file deve essere stato aperto in lettura e scrittura (‘I-O’); inoltre, il record deve avere una dimensione fissa. File organizzati in modo sequenziale File organizzati in modo da consentire un accesso diretto Gli schemi sintattici mostrati hanno in comune la prima parte: il nome della variabile che fa riferimento al record, serve a individuare implicitamente il file a cui si fa riferimento; la variabile indicata dopo la parola ‘FROM’, permette di copiare tale variabile su quella del record, prima di procedere alla sovrascrittura, come se si usasse l’istruzione ‘MOVE’ prima di ‘REWRITE’: Quando si utilizza l’istruzione ‘REWRITE’ con un file aperto in modo sequenziale, prima è necessario che sia stata eseguita una lettura del record che si vuole sovrascrivere; la lettura implica la selezione del record. Nel caso particolare di un accesso sequenziale a un file con indice, oltre che leggere preventivamente il record da sovrascrivere, occorre accertarsi che la riscrittura mantenga la stessa chiave, altrimenti la riscrittura non avviene e si attiva invece l’opzione ‘INVALID KEY’ (con l’esecuzione delle istruzioni che questa controlla). Oltre a questo, se il file prevede l’esistenza di una chiave secondaria e non sono ammesse chiavi doppie, se il record da sovrascrivere contiene una chiave secondaria già esistente in un altro, si ottiene, anche in questo caso, l’attivazione dell’opzione ‘INVALID KEY’. Quando l’istruzione ‘REWRITE’ si applica a file aperti attraverso un accesso diretto, dinamico o con chiave, la sovrascrittura non richiede più di procedere prima a una lettura del record, perché è sufficiente indicarlo tramite il numero (‘RELATIVE KEY’) oppure attraverso la chiave primaria. In tal caso, la condizione ‘INVALID KEY’ si verifica quando il numero del record o la chiave primaria non corrispondono a nulla di già esistente nel file. Nel caso particolare dei file con indice, la condizione ‘INVALID KEY’ si avvera anche quando, non essendo previste chiavi doppie, si tenta di modificare un record, immettendo però una chiave secondaria (non quella primaria) già esistente in un altro.

Manuale COBOL 971 |Listato 82.221. Programma elementare che legge un file sequenziale, ad accesso sequenziale, che quando incontra un record contenente lettere «A», lo sostituisce con lettere «Z». |000100 IDENTIFICATION DIVISION. |000200 PROGRAM-ID. TEST-READ-SEQ-REWRITE. |000300 AUTHOR. DANIELE GIACOMINI. |000400 INSTALLATION. NANOLINUX IV, |000500 TINYCOBOL 0.61, |000600 OPENCOBOL 0.31. |000700 DATE-WRITTEN. 2005-03-12. |000800* |000900 ENVIRONMENT DIVISION. |001000* |001100 INPUT-OUTPUT SECTION. |001200* |001300 FILE-CONTROL. |001400* |001500 SELECT FILE-DA-MODIFICARE ASSIGN TO "input.seq" |001600 ORGANIZATION IS SEQUENTIAL. |001700* |001800 DATA DIVISION. |001900* |002000 FILE SECTION. |002100* |002200 FD FILE-DA-MODIFICARE |002300 LABEL RECORD IS STANDARD. |002400* |002500 01 RECORD-DA-MODIFICARE PIC X(30). |002600* |002700 WORKING-STORAGE SECTION. |002800 01 EOF PIC 9 VALUE ZERO. |002900* |003000 PROCEDURE DIVISION. |003100*------------------------- LIVELLO 0 ----------------------------- |003200 MAIN. |003300 OPEN I-O FILE-DA-MODIFICARE. |003400 READ FILE-DA-MODIFICARE |003500 AT END |003600 MOVE 1 TO EOF. |003700 PERFORM LETTURA-RISCRITTURA UNTIL EOF = 1. |003800 CLOSE FILE-DA-MODIFICARE. |003900* |004000 STOP RUN. |004100*------------------------- LIVELLO 1 ----------------------------- |004200 LETTURA-RISCRITTURA. |004300 IF RECORD-DA-MODIFICARE = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |004400 THEN |004500 MOVE "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" |004600 TO RECORD-DA-MODIFICARE, |004700 REWRITE RECORD-DA-MODIFICARE. |004800 READ FILE-DA-MODIFICARE |004900 AT END |005000 MOVE 1 TO EOF.

970 volume V Programmazione<br />

«<br />

82.12.17 Istruzione «REWRITE»<br />

L’istruzione ‘REWRITE’ consente si sovrascrivere un record logico all’interno di un file, purché<br />

questo risieda all’interno di un’unità che consente un accesso diretto ai dati (le unità sequenziali<br />

come i nastri sono escluse). Per utilizzare l’istruzione ‘REWRITE’ il file deve essere stato<br />

aperto in lettura e scrittura (‘I-O’); inoltre, il record deve avere una dimensione fissa.<br />

File organizzati in modo sequenziale<br />

File organizzati in modo da consentire un accesso diretto<br />

Gli schemi sintattici mostrati hanno in comune la prima parte: il nome della variabile che fa riferimento<br />

al record, serve a individuare implicitamente il file a cui si fa riferimento; la variabile<br />

indicata dopo la parola ‘FROM’, permette di copiare tale variabile su quella del record, prima di<br />

procedere alla sovrascrittura, come se si usasse l’istruzione ‘MOVE’ prima di ‘REWRITE’:<br />

Quando si utilizza l’istruzione ‘REWRITE’ con un file aperto in modo sequenziale, prima è<br />

necessario che sia stata eseguita una lettura del record che si vuole sovrascrivere; la lettura<br />

implica la selezione del record. Nel caso particolare di un accesso sequenziale a un file con<br />

indice, oltre che leggere preventivamente il record da sovrascrivere, occorre accertarsi che la<br />

riscrittura mantenga la stessa chiave, altrimenti la riscrittura non avviene e si attiva invece<br />

l’opzione ‘INVALID KEY’ (con l’esecuzione delle istruzioni che questa controlla). Oltre a<br />

questo, se il file prevede l’esistenza di una chiave secondaria e non sono ammesse chiavi<br />

doppie, se il record da sovrascrivere contiene una chiave secondaria già esistente in un altro, si<br />

ottiene, anche in questo caso, l’attivazione dell’opzione ‘INVALID KEY’.<br />

Quando l’istruzione ‘REWRITE’ si applica a file aperti attraverso un accesso diretto, dinamico<br />

o con chiave, la sovrascrittura non richiede più di procedere prima a una lettura del record,<br />

perché è sufficiente indicarlo tramite il numero (‘RELATIVE KEY’) oppure attraverso la chiave<br />

primaria. In tal caso, la condizione ‘INVALID KEY’ si verifica quando il numero del record o<br />

la chiave primaria non corrispondono a nulla di già esistente nel file. Nel caso particolare dei<br />

file con indice, la condizione ‘INVALID KEY’ si avvera anche quando, non essendo previste<br />

chiavi doppie, si tenta di modificare un record, immettendo però una chiave secondaria (non<br />

quella primaria) già esistente in un altro.

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

Saved successfully!

Ooh no, something went wrong!