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

878 volume V Programmazione L’organizzazione relativa, oltre alle operazioni di lettura e scrittura, prevede la cancellazione dei record, che comunque possono essere rimpiazzati successivamente attraverso un’operazione di scrittura. Si osservi comunque che un record che risulta essere stato cancellato, non può essere letto. Osservando lo schema sintattico si può intuire che la prima parte dell’istruzione ‘SELECT’ funzioni nello stesso modo di un file organizzato sequenzialmente; la differenza più importante riguarda la definizione del tipo di unità di memorizzazione che, date le caratteristiche dei file organizzati in modo relativo, deve consentire un accesso diretto ai dati. La dichiarazione ‘RESERVE integer’ si usa nello stesso modo del file organizzato sequenzialmente. L’indicazione dell’organizzazione, attraverso la dichiarazione ‘ORGANIZATION IS RELATIVE’ è obbligatoria, anche se probabilmente è sufficiente scrivere soltanto ‘RELATIVE’. Se non viene specificata la dichiarazione ‘ACCESS MODE’, si intende che l’accesso debba avvenire in modo sequenziale, altrimenti vale quanto indicato espressamente. Se l’accesso richiesto è diretto o dinamico, è necessario indicare quale variabile usare per specificare il numero del record, nella posizione occupata nello schema sintattico dalla metavariabile data-name-1 (da specificare ulteriormente nella sezione ‘WORKING-STORAGE SECTION’ della divisione ‘DATA DIVISION’). La dichiarazione ‘FILE STATUS IS data-name-2’ funziona nello stesso modo descritto a proposito dei file organizzati in modo sequenziale. Il punto fermo che conclude l’istruzione ‘SELECT’ appare una volta sola, alla fine; tutta l’istruzione deve risiedere nell’area B. Viene mostrato un esempio completo di un programma COBOL che legge un file relativo, ad accesso diretto, scandendo sequenzialmente il numero del record: |Listato 82.38. Programma elementare che legge un file relativo, ad accesso diretto. |000100 IDENTIFICATION DIVISION. |000200 PROGRAM-ID. ESEMPIO-RELATIVO-DIRETTO. |000300 AUTHOR. DANIELE GIACOMINI. |000400 DATE-WRITTEN. 2005-03-08. |000500 ENVIRONMENT DIVISION. |000600 INPUT-OUTPUT SECTION. |000700* |000800 FILE-CONTROL. |000900 SELECT MIO-FILE ASSIGN TO "input.rel" |001000 ORGANIZATION IS RELATIVE |001100 ACCESS MODE IS RANDOM |001200 RELATIVE KEY IS N-RECORD |001300 FILE STATUS IS STATO-DEL-FILE. |001400* |001500 DATA DIVISION. |001600 FILE SECTION. |001700 FD MIO-FILE |001800 LABEL RECORD IS STANDARD. |001900 01 MIO-RECORD PIC X(20). |002000 WORKING-STORAGE SECTION. |002100 77 N-RECORD PIC 9999 COMP VALUE IS ZERO. |002200 77 STATO-DEL-FILE PIC XX.

Manuale COBOL 879 |002300 PROCEDURE DIVISION. |002400 MAIN. |002500 OPEN INPUT MIO-FILE. |002600 DISPLAY "FILE STATUS: ", STATO-DEL-FILE. |002700 PERFORM READ-FILE UNTIL STATO-DEL-FILE NOT = ZERO. |002800 CLOSE MIO-FILE. |002900 STOP RUN. |003000 READ-FILE. |003100 ADD 1 TO N-RECORD. |003200 READ MIO-FILE |003300 INVALID KEY DISPLAY "INVALID KEY!". |003400 DISPLAY "FILE STATUS: " STATO-DEL-FILE, |003500 " RECORD: ", N-RECORD, " ", MIO-RECORD. |003600 Il file indicato come ‘MIO-FILE’ è associato in pratica al file ‘input.rel’. Si può supporre che questo file sia composto dall’elenco seguente di record logici: 1. ‘aaaaaaaaaaaaaaaaaaaa’ 2. ‘bbbbbbbbbbbbbbbbbbbb’ 3. ‘cccccccccccccccccccc’ 4. ‘dddddddddddddddddddd’ Eseguendo il programma dell’esempio si potrebbe ottenere il testo seguente attraverso lo schermo: |FILE STATUS: 00 |FILE STATUS: 00 RECORD: 0001 aaaaaaaaaaaaaaaaaaaa |FILE STATUS: 00 RECORD: 0002 bbbbbbbbbbbbbbbbbbbb |FILE STATUS: 00 RECORD: 0003 cccccccccccccccccccc |FILE STATUS: 00 RECORD: 0004 dddddddddddddddddddd |INVALID KEY! |FILE STATUS: 23 RECORD: 0005 dddddddddddddddddddd Segue un altro esempio completo per la lettura di un file relativo, utilizzando un accesso dinamico, partendo dal primo record e selezionando i successivi attraverso la richiesta del prossimo: |Listato 82.40. Programma elementare che legge un file relativo, ad accesso dinamico. |000100 IDENTIFICATION DIVISION. |000200 PROGRAM-ID. ESEMPIO-RELATIVO-DINAMICO. |000300 AUTHOR. DANIELE GIACOMINI. |000400 DATE-WRITTEN. 2005-03-08. |000500 ENVIRONMENT DIVISION. |000600 INPUT-OUTPUT SECTION. |000700* |000800 FILE-CONTROL. |000900 SELECT MIO-FILE ASSIGN TO "input.rel" |001000 ORGANIZATION IS RELATIVE

Manuale COBOL 879<br />

|002300 PROCEDURE DIVISION.<br />

|002400 MAIN.<br />

|002500 OPEN INPUT MIO-FILE.<br />

|002600 DISPLAY "FILE STATUS: ", STATO-DEL-FILE.<br />

|002700 PERFORM READ-FILE UNTIL STATO-DEL-FILE NOT = ZERO.<br />

|002800 CLOSE MIO-FILE.<br />

|002900 STOP RUN.<br />

|003000 READ-FILE.<br />

|003100 ADD 1 TO N-RECORD.<br />

|003200 READ MIO-FILE<br />

|003300 INVALID KEY DISPLAY "INVALID KEY!".<br />

|003400 DISPLAY "FILE STATUS: " STATO-DEL-FILE,<br />

|003500 " RECORD: ", N-RECORD, " ", MIO-RECORD.<br />

|003600<br />

Il file indicato come ‘MIO-FILE’ è associato in pratica al file ‘input.rel’. Si può supporre<br />

che questo file sia composto dall’elenco seguente di record logici:<br />

1. ‘aaaaaaaaaaaaaaaaaaaa’<br />

2. ‘bbbbbbbbbbbbbbbbbbbb’<br />

3. ‘cccccccccccccccccccc’<br />

4. ‘dddddddddddddddddddd’<br />

Eseguendo il programma dell’esempio si potrebbe ottenere il testo seguente attraverso lo<br />

schermo:<br />

|FILE STATUS: 00<br />

|FILE STATUS: 00 RECORD: 0001 aaaaaaaaaaaaaaaaaaaa<br />

|FILE STATUS: 00 RECORD: 0002 bbbbbbbbbbbbbbbbbbbb<br />

|FILE STATUS: 00 RECORD: 0003 cccccccccccccccccccc<br />

|FILE STATUS: 00 RECORD: 0004 dddddddddddddddddddd<br />

|INVALID KEY!<br />

|FILE STATUS: 23 RECORD: 0005 dddddddddddddddddddd<br />

Segue un altro esempio completo per la lettura di un file relativo, utilizzando un accesso<br />

dinamico, partendo dal primo record e selezionando i successivi attraverso la richiesta del<br />

prossimo:<br />

|Listato 82.40. Programma elementare che legge un file relativo, ad accesso dinamico.<br />

|000100 IDENTIFICATION DIVISION.<br />

|000200 PROGRAM-ID. ESEMPIO-RELATIVO-DINAMICO.<br />

|000300 AUTHOR. DANIELE GIACOMINI.<br />

|000400 DATE-WRITTEN. 2005-03-08.<br />

|000500 ENVIRONMENT DIVISION.<br />

|000600 INPUT-OUTPUT SECTION.<br />

|000700*<br />

|000800 FILE-CONTROL.<br />

|000900 SELECT MIO-FILE ASSIGN TO "input.rel"<br />

|001000 ORGANIZATION IS RELATIVE

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

Saved successfully!

Ooh no, something went wrong!