Parte ii - IIS Marconi Latina - Area didattica
Parte ii - IIS Marconi Latina - Area didattica Parte ii - IIS Marconi Latina - Area didattica
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
- Page 1 and 2: TXT HTM PDF pdf P1 P2 P3 P4 Parte i
- Page 3 and 4: 849 Capitolo 82 TXT HTM PDF pdf P1
- Page 5 and 6: Manuale COBOL 851 82.12.8 Istruzion
- Page 7 and 8: Manuale COBOL 853 Gli autori e i ti
- Page 9 and 10: Manuale COBOL 855 La divisione ‘D
- Page 11 and 12: Manuale COBOL 857 I caratteri di in
- Page 13 and 14: Manuale COBOL 859 |Tabella 82.7. Cl
- Page 15 and 16: Manuale COBOL 861 Una costante nume
- Page 17 and 18: Manuale COBOL 863 |Tabella 82.15. C
- Page 19 and 20: Manuale COBOL 865 |Listato 82.17. U
- Page 21 and 22: Manuale COBOL 867 |Figura 82.18. Es
- Page 23 and 24: Manuale COBOL 869 82.3.2 Codifica d
- Page 25 and 26: Manuale COBOL 871 82.4.2.2 Paragraf
- Page 27 and 28: Manuale COBOL 873 |001000 SPECIAL-N
- Page 29 and 30: Manuale COBOL 875 82.4.3.3 Istruzio
- Page 31: Manuale COBOL 877 |003300 DISPLAY "
- Page 35 and 36: Manuale COBOL 881 Un file organizza
- Page 37 and 38: Manuale COBOL 883 L’esempio segue
- Page 39 and 40: Manuale COBOL 885 Nei manuali COBOL
- Page 41 and 42: Manuale COBOL 887 Codice Organizzaz
- Page 43 and 44: Manuale COBOL 889 record) può esse
- Page 45 and 46: Manuale COBOL 891 82.5.1.3 Dichiara
- Page 47 and 48: Manuale COBOL 893 82.5.1.8 Dichiara
- Page 49 and 50: Manuale COBOL 895 |000000 01 RECORD
- Page 51 and 52: Manuale COBOL 897 In questo caso, i
- Page 53 and 54: Manuale COBOL 899 Nel primo schema,
- Page 55 and 56: Manuale COBOL 901 |P: ABCDEFGHIJ |Q
- Page 57 and 58: Manuale COBOL 903 82.6.5 Opzione «
- Page 59 and 60: Manuale COBOL 905 82.6.10 Opzione
- Page 61 and 62: Manuale COBOL 907 82.7.2 Riferiment
- Page 63 and 64: Manuale COBOL 909 |000100 IDENTIFIC
- Page 65 and 66: Manuale COBOL 911 |001500 03 COGNOM
- Page 67 and 68: Manuale COBOL 913 |000700* |000800
- Page 69 and 70: Manuale COBOL 915 La parola chiave
- Page 71 and 72: Manuale COBOL 917 82.8.3 Qualificaz
- Page 73 and 74: Manuale COBOL 919 82.9 Modello di d
- Page 75 and 76: Manuale COBOL 921 viene assegnato l
- Page 77 and 78: Manuale COBOL 923 |002600 " DATA: "
- Page 79 and 80: Manuale COBOL 925 |SOURCE VALUE IS
- Page 81 and 82: Manuale COBOL 927 |004900 DISPLAY "
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