[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]
[volume]
[parte]
Capitolo 476. COBOL: esempi elementari con i file
Questo capitolo raccoglie degli esempi elementari di programmi COBOL per l'accesso ai file. Questi esempi risalgono a un lavoro didattico del 1983, realizzato con un minicomputer Burroughs B91 del 1981.
Salvo dove indicato in maniera differente, gli esempi mostrati funzionano regolarmente se compilati con OpenCOBOL 0.31.
476.1
AGO-83-1: estensione di un file sequenziale
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-1.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-03-20.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-SCRIVERE ASSIGN TO "file.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400*
001500 DATA DIVISION.
001600*
001700 FILE SECTION.
001800*
001900 FD FILE-DA-SCRIVERE
002000 LABEL RECORD IS STANDARD.
002100*
002200 01 RECORD-DA-SCRIVERE.
002300 02 CODICE-FILE PIC 9(10) COMP.
002400 02 TESTO PIC X(75).
002500*
002600 WORKING-STORAGE SECTION.
002700*
002800 01 CAMPI-SCALARI.
002900 02 EOJ PIC 9 COMP VALUE IS 0.
003000*
003100 PROCEDURE DIVISION.
003200*------------------------- LIVELLO 0 -----------------------------
003300 MAIN.
003400 OPEN EXTEND FILE-DA-SCRIVERE.
003500 PERFORM INSERIMENTO-DATI UNTIL EOJ = 1.
003600 CLOSE FILE-DA-SCRIVERE.
003700 STOP RUN.
003800*------------------------- LIVELLO 1 -----------------------------
003900 INSERIMENTO-DATI.
004000 DISPLAY "INSERISCI PRIMA IL CODICE NUMERICO, POI IL TESTO"
004100 ACCEPT CODICE-FILE.
004200 IF CODICE-FILE = 0
004300 THEN
004400 MOVE 1 TO EOJ,
004500 ELSE
004600 ACCEPT TESTO,
004700 WRITE RECORD-DA-SCRIVERE.
004800*
|
|
476.2
AGO-83-2: lettura sequenziale e ricerca di una chiave
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-1.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-LEGGERE ASSIGN TO "file.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400*
001500 DATA DIVISION.
001600*
001700 FILE SECTION.
001800*
001900 FD FILE-DA-LEGGERE
002000 LABEL RECORD IS STANDARD.
002100*
002200 01 RECORD-DA-LEGGERE.
002300 02 CODICE-FILE PIC 9(10) COMP.
002400 02 TESTO PIC X(75).
002500*
002600 WORKING-STORAGE SECTION.
002700*
002800 01 CAMPI-SCALARI.
002900 02 EOF PIC 9 COMP VALUE IS 0.
003000 02 EOJ PIC 9 COMP VALUE IS 0.
003100 02 CODICE-RECORD PIC 9(10) COMP VALUE IS 0.
003200*
003300 PROCEDURE DIVISION.
003400*------------------------- LIVELLO 0 -----------------------------
003500 MAIN.
003600 OPEN INPUT FILE-DA-LEGGERE.
003700 READ FILE-DA-LEGGERE
003800 AT END MOVE 1 TO EOF.
003900 PERFORM DOMANDA UNTIL EOF = 1 OR EOJ = 1.
004000 CLOSE FILE-DA-LEGGERE.
004100 STOP RUN.
004200*------------------------- LIVELLO 1 -----------------------------
004300 DOMANDA.
004400 DISPLAY "INSERISCI IL CODICE DEL RECORD, DI 10 CIFRE"
004500 ACCEPT CODICE-RECORD.
004600 IF CODICE-RECORD = 0
004700 THEN
004800 MOVE 1 TO EOJ.
004900 PERFORM RICERCA UNTIL EOF = 1 OR EOJ = 1.
005000 CLOSE FILE-DA-LEGGERE.
005100 MOVE ZERO TO EOF.
005200 OPEN INPUT FILE-DA-LEGGERE.
005300 READ FILE-DA-LEGGERE
005400 AT END MOVE 1 TO EOF.
005500*------------------------- LIVELLO 2 -----------------------------
005600 RICERCA.
005700 IF CODICE-FILE = CODICE-RECORD
005800 THEN
005900 DISPLAY CODICE-FILE, " ", TESTO.
006000 READ FILE-DA-LEGGERE
006100 AT END MOVE 1 TO EOF.
006200*
|
|
476.3
AGO-83-3: estensione di un file relativo
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-3.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-03-20.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-SCRIVERE ASSIGN TO "file.rel"
001300 ORGANIZATION IS RELATIVE
001400 ACCESS MODE IS SEQUENTIAL.
001500*
001600 DATA DIVISION.
001700*
001800 FILE SECTION.
001900*
002000 FD FILE-DA-SCRIVERE
002100 LABEL RECORD IS STANDARD.
002200*
002300 01 RECORD-DA-SCRIVERE.
002400 02 TESTO PIC X(80).
002500*
002600 WORKING-STORAGE SECTION.
002700*
002800 01 CAMPI-SCALARI.
002900 02 EOJ PIC 9 COMP VALUE IS 0.
003000*
003100 PROCEDURE DIVISION.
003200*------------------------- LIVELLO 0 -----------------------------
003300 MAIN.
003400 OPEN EXTEND FILE-DA-SCRIVERE.
003500 PERFORM INSERIMENTO-DATI UNTIL EOJ = 1.
003600 CLOSE FILE-DA-SCRIVERE.
003700 STOP RUN.
003800*------------------------- LIVELLO 1 -----------------------------
003900 INSERIMENTO-DATI.
004000 DISPLAY "INSERISCI IL TESTO DEL RECORD"
004100 ACCEPT TESTO.
004200 IF TESTO = SPACES
004300 THEN
004400 MOVE 1 TO EOJ,
004500 ELSE
004600 WRITE RECORD-DA-SCRIVERE.
004700*
|
|
476.4
AGO-83-4: lettura di un file relativo ad accesso diretto
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-4.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-LEGGERE ASSIGN TO "file.rel"
001300 ORGANIZATION IS RELATIVE
001400 ACCESS MODE IS RANDOM
001500 RELATIVE KEY IS N-RECORD.
001600*
001700 DATA DIVISION.
001800*
001900 FILE SECTION.
002000*
002100 FD FILE-DA-LEGGERE
002200 LABEL RECORD IS STANDARD.
002300*
002400 01 RECORD-DA-LEGGERE.
002500 02 TESTO PIC X(80).
002600*
002700 WORKING-STORAGE SECTION.
002800*
002900 01 CAMPI-SCALARI.
003000 02 INVALID-KEY PIC 9 COMP VALUE IS 0.
003100 02 EOJ PIC 9 COMP VALUE IS 0.
003200 02 N-RECORD PIC 9(10) COMP VALUE IS 0.
003300*
003400 PROCEDURE DIVISION.
003500*------------------------- LIVELLO 0 -----------------------------
003600 MAIN.
003700 OPEN INPUT FILE-DA-LEGGERE.
003800 PERFORM ELABORA UNTIL EOJ = 1.
003900 CLOSE FILE-DA-LEGGERE.
004000 STOP RUN.
004100*------------------------- LIVELLO 1 -----------------------------
004200 ELABORA.
004300 DISPLAY "INSERISCI IL NUMERO DEL RECORD"
004400 ACCEPT N-RECORD.
004500 IF N-RECORD = 0
004600 THEN
004700 MOVE 1 TO EOJ;
004800 ELSE
004900 PERFORM LEGGI,
005000 IF INVALID-KEY = 1
005100 THEN
005200 DISPLAY "INVALID KEY";
005300 ELSE
005400 PERFORM VISUALIZZA.
005500*------------------------- LIVELLO 2 -----------------------------
005600 VISUALIZZA.
005700 DISPLAY N-RECORD, " ", TESTO.
005800*-----------------------------------------------------------------
005900 LEGGI.
006000 MOVE ZERO TO INVALID-KEY.
006100 READ FILE-DA-LEGGERE
006200 INVALID KEY
006300 MOVE 1 TO INVALID-KEY.
006400*
|
|
476.5
AGO-83-5: creazione di un file a indice
Questo esempio funziona con il compilatore TinyCOBOL 0.61. In questo caso, vengono creati due file: file.ind
e file.ind1
, che insieme costituiscono lo stesso file logico.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-5.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-03-20.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-SCRIVERE ASSIGN TO "file.ind"
001300 ORGANIZATION IS INDEXED
001400 ACCESS MODE IS SEQUENTIAL
001500 RECORD KEY IS CHIAVE
001600 ALTERNATE RECORD KEY IS CHIAVE2
001700 WITH DUPLICATES.
001800*
001900 DATA DIVISION.
002000*
002100 FILE SECTION.
002200*
002300 FD FILE-DA-SCRIVERE
002400 LABEL RECORD IS STANDARD.
002500*
002600 01 RECORD-DA-SCRIVERE.
002700 02 CHIAVE PIC X(5).
002800 02 CHIAVE2 PIC X(5).
002900 02 TESTO PIC X(70).
003000*
003100 WORKING-STORAGE SECTION.
003200*
003300 01 CAMPI-SCALARI.
003400 02 EOJ PIC 9 COMP VALUE IS 0.
003500*
003600 PROCEDURE DIVISION.
003700*------------------------- LIVELLO 0 -----------------------------
003800 MAIN.
003900 OPEN OUTPUT FILE-DA-SCRIVERE.
004000 PERFORM INSERIMENTO-DATI UNTIL EOJ = 1.
004100 CLOSE FILE-DA-SCRIVERE.
004200 STOP RUN.
004300*------------------------- LIVELLO 1 -----------------------------
004400 INSERIMENTO-DATI.
004500 DISPLAY "INSERISCI IL RECORD: I PRIMI CINQUE CARATTERI ",
004600 "COSTITUISCONO LA CHIAVE PRIMARIA ",
004700 "CHE DEVE ESSERE UNICA"
004800 ACCEPT RECORD-DA-SCRIVERE.
004900 IF RECORD-DA-SCRIVERE = SPACES
005000 THEN
005100 MOVE 1 TO EOJ,
005200 ELSE
005300 WRITE RECORD-DA-SCRIVERE
005400 INVALID KEY
005500 DISPLAY "LA CHIAVE ", CHIAVE,
005600 " E' DOPPIA, OPPURE "
005700 "NON E' VALIDA".
005800*
|
|
476.6
AGO-83-6: lettura di un file a indice ad accesso diretto
Questo esempio funziona con il compilatore TinyCOBOL 0.61 e utilizza il file creato con l'esempio precedente.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-6.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-LEGGERE ASSIGN TO "file.ind"
001300 ORGANIZATION IS INDEXED
001400 ACCESS MODE IS RANDOM
001500 RECORD KEY IS CHIAVE
001600 ALTERNATE RECORD KEY IS CHIAVE2
001700 WITH DUPLICATES.
001800*
001900 DATA DIVISION.
002000*
002100 FILE SECTION.
002200*
002300 FD FILE-DA-LEGGERE
002400 LABEL RECORD IS STANDARD.
002500*
002600 01 RECORD-DA-LEGGERE.
002700 02 CHIAVE PIC X(5).
002800 02 CHIAVE2 PIC X(5).
002900 02 TESTO PIC X(70).
003000*
003100 WORKING-STORAGE SECTION.
003200*
003300 01 CAMPI-SCALARI.
003400 02 EOJ PIC 9 COMP VALUE IS 0.
003500 02 INV-KEY PIC 9 COMP VALUE IS 0.
003600*
003700 PROCEDURE DIVISION.
003800*------------------------- LIVELLO 0 -----------------------------
003900 MAIN.
004000 OPEN INPUT FILE-DA-LEGGERE.
004100 PERFORM ELABORAZIONE UNTIL EOJ = 1.
004200 CLOSE FILE-DA-LEGGERE.
004300 STOP RUN.
004400*------------------------- LIVELLO 1 -----------------------------
004500 ELABORAZIONE.
004600 DISPLAY "INSERISCI LA CHIAVE PRIMARIA".
004700 ACCEPT CHIAVE.
004800 IF CHIAVE = SPACES
004900 THEN
005000 MOVE 1 TO EOJ,
005100 ELSE
005200 PERFORM LEGGI,
005300 IF INV-KEY = 1
005400 THEN
005500 DISPLAY "INVALID KEY: ", CHIAVE,
005600 ELSE
005700 DISPLAY CHIAVE, " ", CHIAVE2, " ", TESTO.
005800*------------------------- LIVELLO 2 -----------------------------
005900 LEGGI.
006000 MOVE 0 TO INV-KEY.
006100 READ FILE-DA-LEGGERE
006200 INVALID KEY
006300 MOVE 1 TO INV-KEY.
006400*
|
|
476.7
AGO-83-8: lettura di un file a indice ad accesso dinamico
Questo esempio funziona parzialmente con il compilatore TinyCOBOL 0.61 e utilizza il file già predisposto per quello precedente. Si osservi che si fa riferimento alla chiave secondaria del file, in modo da poter contare sulla presenza di chiavi doppie.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-8.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-LEGGERE ASSIGN TO "file.ind"
001300 ORGANIZATION IS INDEXED
001400 ACCESS MODE IS DYNAMIC
001500 RECORD KEY IS CHIAVE2.
001600*
001700 DATA DIVISION.
001800*
001900 FILE SECTION.
002000*
002100 FD FILE-DA-LEGGERE
002200 LABEL RECORD IS STANDARD.
002300*
002400 01 RECORD-DA-LEGGERE.
002500 02 CHIAVE PIC X(5).
002600 02 CHIAVE2 PIC X(5).
002700 02 TESTO PIC X(70).
002800*
002900 WORKING-STORAGE SECTION.
003000*
003100 01 CAMPI-SCALARI.
003200 02 EOJ PIC 9 COMP VALUE IS 0.
003300 02 EOF PIC 9 COMP VALUE IS 0.
003400 02 INV-KEY PIC 9 COMP VALUE IS 0.
003500 02 END-KEY PIC 9 COMP VALUE IS 0.
003600 02 CHIAVE-W PIC X(5).
003700*
003800 PROCEDURE DIVISION.
003900*------------------------- LIVELLO 0 -----------------------------
004000 MAIN.
004100 OPEN INPUT FILE-DA-LEGGERE.
004200 PERFORM ELABORAZIONE UNTIL EOJ = 1.
004300 CLOSE FILE-DA-LEGGERE.
004400 STOP RUN.
004500*------------------------- LIVELLO 1 -----------------------------
004600 ELABORAZIONE.
004700 DISPLAY "INSERISCI LA CHIAVE SECONDARIA".
004800 ACCEPT CHIAVE2.
004900 IF CHIAVE2 = SPACES
005000 THEN
005100 MOVE 1 TO EOJ,
005200 ELSE
005300 MOVE CHIAVE2 TO CHIAVE-W,
005400 PERFORM LEGGI,
005500 IF INV-KEY = 1
005600 THEN
005700 DISPLAY "INVALID KEY: ", CHIAVE2,
005800 ELSE
005900 PERFORM MOSTRA-LEGGI-NEXT
006000 UNTIL END-KEY = 1
006100 OR EOF = 1.
006200*------------------------- LIVELLO 2 -----------------------------
006300 LEGGI.
006400 MOVE ZERO TO END-KEY.
006500 MOVE ZERO TO EOF.
006600 MOVE ZERO TO INV-KEY.
006700 READ FILE-DA-LEGGERE
006800 INVALID KEY MOVE 1 TO INV-KEY.
006900*-----------------------------------------------------------------
007000 MOSTRA-LEGGI-NEXT.
007100 DISPLAY CHIAVE, " ", CHIAVE2, " ", TESTO.
007200 READ FILE-DA-LEGGERE NEXT RECORD
007300 AT END MOVE 1 TO EOF.
007400 IF NOT CHIAVE-W = CHIAVE2
007500 THEN
007600 MOVE 1 TO END-KEY.
007700*
|
|
476.8
AGO-83-10: lettura di un file a indice ad accesso dinamico
Questo esempio funziona con il compilatore TinyCOBOL 0.61 e utilizza il file già predisposto per quello precedente. In questo caso si ritorna a utilizzare la chiave primaria.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-10.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-LEGGERE ASSIGN TO "file.ind"
001300 ORGANIZATION IS INDEXED
001400 ACCESS MODE IS DYNAMIC
001500 RECORD KEY IS CHIAVE.
001600*
001700 DATA DIVISION.
001800*
001900 FILE SECTION.
002000*
002100 FD FILE-DA-LEGGERE
002200 LABEL RECORD IS STANDARD.
002300*
002400 01 RECORD-DA-LEGGERE.
002500 02 CHIAVE PIC X(5).
002600 02 CHIAVE2 PIC X(5).
002700 02 TESTO PIC X(70).
002800*
002900 WORKING-STORAGE SECTION.
003000*
003100 01 CAMPI-SCALARI.
003200 02 EOJ PIC 9 COMP VALUE IS 0.
003300 02 EOF PIC 9 COMP VALUE IS 0.
003400 02 INV-KEY PIC 9 COMP VALUE IS 0.
003500 02 END-KEY PIC 9 COMP VALUE IS 0.
003600 02 CHIAVE-INIZIALE PIC X(5).
003700 02 CHIAVE-FINALE PIC X(5).
003800 02 CHIAVE-SCAMBIO PIC X(5).
003900*
004000 PROCEDURE DIVISION.
004100*------------------------- LIVELLO 0 -----------------------------
004200 MAIN.
004300 OPEN INPUT FILE-DA-LEGGERE.
004400 PERFORM ELABORAZIONE UNTIL EOJ = 1.
004500 CLOSE FILE-DA-LEGGERE.
004600 STOP RUN.
004700*------------------------- LIVELLO 1 -----------------------------
004800 ELABORAZIONE.
004900 DISPLAY "INSERISCI LA CHIAVE PRIMARIA INIZIALE, POI QUELLA ",
005000 "FINALE".
005100 ACCEPT CHIAVE-INIZIALE.
005200 ACCEPT CHIAVE-FINALE.
005300 IF CHIAVE-INIZIALE > CHIAVE-FINALE
005400 THEN
005500 MOVE CHIAVE-INIZIALE TO CHIAVE-SCAMBIO,
005600 MOVE CHIAVE-FINALE TO CHIAVE-INIZIALE,
005700 MOVE CHIAVE-SCAMBIO TO CHIAVE-FINALE.
005800 IF CHIAVE-INIZIALE = SPACES
005900 THEN
006000 MOVE 1 TO EOJ,
006100 ELSE
006200 MOVE CHIAVE-INIZIALE TO CHIAVE,
006300 PERFORM LEGGI,
006400 IF INV-KEY = 1
006500 THEN
006600 DISPLAY "INVALID KEY: ", CHIAVE,
006700 ELSE
006800 PERFORM MOSTRA-LEGGI-NEXT
006900 UNTIL END-KEY = 1
007000 OR EOF = 1.
007100*------------------------- LIVELLO 2 -----------------------------
007200 LEGGI.
007300 MOVE ZERO TO END-KEY.
007400 MOVE ZERO TO EOF.
007500 MOVE ZERO TO INV-KEY.
007600 READ FILE-DA-LEGGERE
007700 INVALID KEY MOVE 1 TO INV-KEY.
007800*-----------------------------------------------------------------
007900 MOSTRA-LEGGI-NEXT.
008000 DISPLAY CHIAVE, " ", CHIAVE2, " ", TESTO.
008100 READ FILE-DA-LEGGERE NEXT RECORD
008200 AT END MOVE 1 TO EOF.
008300 IF CHIAVE > CHIAVE-FINALE
008400 THEN
008500 MOVE 1 TO END-KEY.
008600*
|
|
476.9
AGO-83-12: lettura di un file a indice ad accesso dinamico
Questo esempio funziona con il compilatore TinyCOBOL 0.61 e utilizza il file già predisposto per quello precedente. In questo caso si utilizza l'istruzione START per il posizionamento iniziale.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-12.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-LEGGERE ASSIGN TO "file.ind"
001300 ORGANIZATION IS INDEXED
001400 ACCESS MODE IS DYNAMIC
001500 RECORD KEY IS CHIAVE.
001600*
001700 DATA DIVISION.
001800*
001900 FILE SECTION.
002000*
002100 FD FILE-DA-LEGGERE
002200 LABEL RECORD IS STANDARD.
002300*
002400 01 RECORD-DA-LEGGERE.
002500 02 CHIAVE PIC X(5).
002600 02 CHIAVE2 PIC X(5).
002700 02 TESTO PIC X(70).
002800*
002900 WORKING-STORAGE SECTION.
003000*
003100 01 CAMPI-SCALARI.
003200 02 EOJ PIC 9 COMP VALUE IS 0.
003300 02 EOF PIC 9 COMP VALUE IS 0.
003400 02 INV-KEY PIC 9 COMP VALUE IS 0.
003500 02 END-KEY PIC 9 COMP VALUE IS 0.
003600 02 CHIAVE-INIZIALE PIC X(5).
003700 02 CHIAVE-FINALE PIC X(5).
003800 02 CHIAVE-SCAMBIO PIC X(5).
003900*
004000 PROCEDURE DIVISION.
004100*------------------------- LIVELLO 0 -----------------------------
004200 MAIN.
004300 OPEN INPUT FILE-DA-LEGGERE.
004400 PERFORM ELABORAZIONE UNTIL EOJ = 1.
004500 CLOSE FILE-DA-LEGGERE.
004600 STOP RUN.
004700*------------------------- LIVELLO 1 -----------------------------
004800 ELABORAZIONE.
004900 DISPLAY "INSERISCI LA CHIAVE PRIMARIA INIZIALE, POI QUELLA ",
005000 "FINALE".
005100 ACCEPT CHIAVE-INIZIALE.
005200 ACCEPT CHIAVE-FINALE.
005300 IF CHIAVE-INIZIALE > CHIAVE-FINALE
005400 THEN
005500 MOVE CHIAVE-INIZIALE TO CHIAVE-SCAMBIO,
005600 MOVE CHIAVE-FINALE TO CHIAVE-INIZIALE,
005700 MOVE CHIAVE-SCAMBIO TO CHIAVE-FINALE.
005800 IF CHIAVE-INIZIALE = SPACES
005900 THEN
006000 MOVE 1 TO EOJ,
006100 ELSE
006200 MOVE CHIAVE-INIZIALE TO CHIAVE,
006300 PERFORM START-LEGGI,
006400 IF INV-KEY = 1
006500 THEN
006600 DISPLAY "INVALID KEY: ", CHIAVE,
006700 ELSE
006800 PERFORM MOSTRA-LEGGI-NEXT
006900 UNTIL END-KEY = 1
007000 OR EOF = 1.
007100*------------------------- LIVELLO 2 -----------------------------
007200 START-LEGGI.
007300 MOVE ZERO TO END-KEY.
007400 MOVE ZERO TO EOF.
007500 MOVE ZERO TO INV-KEY.
007600 START FILE-DA-LEGGERE KEY IS NOT < CHIAVE
007700 INVALID KEY MOVE 1 TO INV-KEY.
007800 IF NOT INV-KEY = 1
007900 THEN
008000 PERFORM LEGGI.
008100*-----------------------------------------------------------------
008200 MOSTRA-LEGGI-NEXT.
008300 DISPLAY CHIAVE, " ", CHIAVE2, " ", TESTO.
008400 PERFORM LEGGI.
008500*------------------------- LIVELLO 3 -----------------------------
008600 LEGGI.
008700 READ FILE-DA-LEGGERE NEXT RECORD
008800 AT END MOVE 1 TO EOF.
008900 IF CHIAVE > CHIAVE-FINALE
009000 THEN
009100 MOVE 1 TO END-KEY.
009200*
|
|
476.10
AGO-83-13: creazione di un file sequenziale con dati da rielaborare
Questo esempio serve a creare un file sequenziale, contenente dei calcoli da eseguire, successivamente, con un altro programma.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-13.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-03-22.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-SCRIVERE ASSIGN TO "calc.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400*
001500 DATA DIVISION.
001600*
001700 FILE SECTION.
001800*
001900 FD FILE-DA-SCRIVERE
002000 LABEL RECORD IS STANDARD.
002100*
002200 01 RECORD-DA-SCRIVERE.
002300 02 NUMERO-1 PIC 9(15).
002400 02 TIPO-CALCOLO PIC X.
002500 02 NUMERO-2 PIC 9(15).
002600 02 FILLER PIC X.
002700 02 RISULTATO PIC 9(15).
002800 02 FILLER PIC X.
002900 02 RESTO PIC 9(15).
003000 02 NOTE PIC X(18).
003100*
003200 WORKING-STORAGE SECTION.
003300*
003400 01 CAMPI-SCALARI.
003500 02 EOJ PIC 9 COMP VALUE IS 0.
003600*
003700 PROCEDURE DIVISION.
003800*------------------------- LIVELLO 0 -----------------------------
003900 MAIN.
004000 OPEN EXTEND FILE-DA-SCRIVERE.
004100 PERFORM INSERIMENTO-DATI UNTIL EOJ = 1.
004200 CLOSE FILE-DA-SCRIVERE.
004300 STOP RUN.
004400*------------------------- LIVELLO 1 -----------------------------
004500 INSERIMENTO-DATI.
004600 DISPLAY "INSERISCI, IN SEQUENZA, IL PRIMO NUMERO, ",
004700 "IL SIMBOLO DELL'OPERAZIONE, IL SECONDO NUMERO".
004800 ACCEPT NUMERO-1.
004900 ACCEPT TIPO-CALCOLO.
005000 ACCEPT NUMERO-2.
005100 IF NUMERO-1 = 0 AND NUMERO-2 = 0 AND TIPO-CALCOLO = SPACE
005200 THEN
005300 MOVE 1 TO EOJ,
005400 ELSE
005500 WRITE RECORD-DA-SCRIVERE.
005600*
|
|
476.11
AGO-83-14: lettura e riscrittura di un file sequenziale
Questo esempio legge e riscrive il file generato con l'esempio precedente, eseguendo i calcoli previsti e mostrando anche il risultato a video.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-14.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-DA-ELABORARE ASSIGN TO "calc.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400*
001500 DATA DIVISION.
001600*
001700 FILE SECTION.
001800*
001900 FD FILE-DA-ELABORARE
002000 LABEL RECORD IS STANDARD.
002100*
002200 01 RECORD-DA-ELABORARE.
002300 02 NUMERO-1 PIC 9(15).
002400 02 TIPO-CALCOLO PIC X.
002500 02 NUMERO-2 PIC 9(15).
002600 02 UGUALE PIC X.
002700 02 RISULTATO PIC 9(15).
002800 02 SEPARAZIONE PIC X.
002900 02 RESTO PIC 9(15).
003000 02 NOTE PIC X(18).
003100*
003200 WORKING-STORAGE SECTION.
003300*
003400 01 CAMPI-SCALARI.
003500 02 EOF PIC 9 COMP VALUE IS 0.
003600 02 EOJ PIC 9 COMP VALUE IS 0.
003700*
003800 PROCEDURE DIVISION.
003900*------------------------- LIVELLO 0 -----------------------------
004000 MAIN.
004100 OPEN I-O FILE-DA-ELABORARE.
004200 READ FILE-DA-ELABORARE
004300 AT END MOVE 1 TO EOF.
004400 PERFORM ELABORAZIONE UNTIL EOF = 1.
004500 CLOSE FILE-DA-ELABORARE.
004600 STOP RUN.
004700*------------------------- LIVELLO 1 -----------------------------
004800 ELABORAZIONE.
004900 MOVE SPACES TO NOTE.
005000 MOVE ZERO TO RESTO.
005100 IF TIPO-CALCOLO = "+"
005200 THEN
005300 COMPUTE RISULTATO = NUMERO-1 + NUMERO-2;
005400 ELSE IF TIPO-CALCOLO = "-"
005500 THEN
005600 COMPUTE RISULTATO = NUMERO-1 - NUMERO-2;
005700 ELSE IF TIPO-CALCOLO = "*"
005800 THEN
005900 COMPUTE RISULTATO = NUMERO-1 * NUMERO-2;
006000 ELSE IF TIPO-CALCOLO = "/"
006100 THEN
006200 DIVIDE NUMERO-1 BY NUMERO-2 GIVING RISULTATO,
006300 REMAINDER RESTO;
006400 ELSE
006500 MOVE ZERO TO RISULTATO,
006600 MOVE "CALCOLO ERRATO" TO NOTE.
006700
006800 MOVE "=" TO UGUALE.
006900 MOVE SPACE TO SEPARAZIONE.
007000 DISPLAY RECORD-DA-ELABORARE.
007100 REWRITE RECORD-DA-ELABORARE.
007200 READ FILE-DA-ELABORARE
007300 AT END MOVE 1 TO EOF.
007400*
|
|
476.12
AGO-83-15: estensione di un file sequenziale contenente aggiornamenti successivi
Questo esempio estende un file sequenziale con delle informazioni, che possono essere aggiornate in momenti successivi. I record si considerano contenere la stessa informazione, aggiornata, quando hanno la stessa chiave.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-15.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-03-22.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-AGGIORNAMENTI ASSIGN TO "agg.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400*
001500 DATA DIVISION.
001600*
001700 FILE SECTION.
001800*
001900 FD FILE-AGGIORNAMENTI
002000 LABEL RECORD IS STANDARD.
002100*
002200 01 RECORD-AGGIORNAMENTI.
002300 02 CHIAVE PIC X(5).
002400 02 DATI PIC X(67).
002500 02 ANNO-MESE-GIORNO.
002600 03 ANNO PIC 9999.
002700 03 MESE PIC 99.
002800 03 GIORNO PIC 99.
002900*
003000 WORKING-STORAGE SECTION.
003100*
003200 01 CAMPI-SCALARI.
003300 02 EOJ PIC 9 COMP VALUE IS 0.
003400*
003500 PROCEDURE DIVISION.
003600*------------------------- LIVELLO 0 -----------------------------
003700 MAIN.
003800 OPEN EXTEND FILE-AGGIORNAMENTI.
003900 PERFORM INSERIMENTO-DATI UNTIL EOJ = 1.
004000 CLOSE FILE-AGGIORNAMENTI.
004100 STOP RUN.
004200*------------------------- LIVELLO 1 -----------------------------
004300 INSERIMENTO-DATI.
004400 DISPLAY "INSERISCI IN SEQUENZA: LA CHIAVE, I DATI DEL ",
004500 "RECORD E LA DATA DI INSERIMENTO. LA DATA SI ",
004600 "SCRIVE SECONDO IL FORMATO AAAAMMGG".
004700 ACCEPT CHIAVE.
004800 ACCEPT DATI.
004900 ACCEPT ANNO-MESE-GIORNO.
005000 IF CHIAVE = SPACES
005100 THEN
005200 MOVE 1 TO EOJ,
005300 ELSE
005400 WRITE RECORD-AGGIORNAMENTI.
005500*
|
|
476.13
AGO-83-16: aggiornamento di un file a indice
Questo esempio utilizza il file sequenziale del programma precedente, per aggiornare i record di un file a indice (che deve essere già esistente). Questo esempio funziona correttamente utilizzando il compilatore TinyCOBOL 0.61.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-16.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-08.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-AGGIORNAMENTI ASSIGN TO "agg.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400*
001500 SELECT FILE-DA-AGGIORNARE ASSIGN TO "agg.ind"
001600 ORGANIZATION IS INDEXED,
001700 ACCESS MODE IS RANDOM,
001800 RECORD KEY IS CHIAVE-K.
001900*
002000 DATA DIVISION.
002100*
002200 FILE SECTION.
002300*
002400 FD FILE-AGGIORNAMENTI
002500 LABEL RECORD IS STANDARD.
002600*
002700 01 RECORD-AGGIORNAMENTI.
002800 02 CHIAVE PIC X(5).
002900 02 DATI PIC X(67).
003000 02 ANNO-MESE-GIORNO.
003100 03 ANNO PIC 9999.
003200 03 MESE PIC 99.
003300 03 GIORNO PIC 99.
003400*
003500 FD FILE-DA-AGGIORNARE
003600 LABEL RECORD IS STANDARD.
003700*
003800 01 RECORD-DA-AGGIORNARE.
003900 02 CHIAVE-K PIC X(5).
004000 02 DATI PIC X(67).
004100 02 ANNO-MESE-GIORNO.
004200 03 ANNO PIC 9999.
004300 03 MESE PIC 99.
004400 03 GIORNO PIC 99.
004500*
004600 WORKING-STORAGE SECTION.
004700*
004800 01 CAMPI-SCALARI.
004900 02 EOF PIC 9 COMP VALUE IS 0.
005000 02 INV-KEY PIC 9 COMP VALUE IS 0.
005100*
005200 PROCEDURE DIVISION.
005300*------------------------- LIVELLO 0 -----------------------------
005400 MAIN.
005500 OPEN INPUT FILE-AGGIORNAMENTI.
005600 OPEN I-O FILE-DA-AGGIORNARE.
005700 PERFORM LEGGI-FILE-AGGIORNAMENTI.
005800 PERFORM ELABORAZIONE
005900 UNTIL EOF = 1.
006000 CLOSE FILE-AGGIORNAMENTI.
006100 CLOSE FILE-DA-AGGIORNARE
006200 STOP RUN.
006300*------------------------- LIVELLO 1 -----------------------------
006400 ELABORAZIONE.
006500 MOVE ZERO TO INV-KEY.
006600 READ FILE-DA-AGGIORNARE
006700 INVALID KEY
006800 MOVE 1 TO INV-KEY.
006900 IF INV-KEY = 1
007000 THEN
007100 PERFORM WRITE-FILE-DA-AGGIORNARE;
007200 ELSE
007300 IF ANNO-MESE-GIORNO OF RECORD-AGGIORNAMENTI >
007400 ANNO-MESE-GIORNO OF RECORD-DA-AGGIORNARE
007500 THEN
007600 PERFORM REWRITE-FILE-DA-AGGIORNARE.
007700 PERFORM LEGGI-FILE-AGGIORNAMENTI.
007800*-----------------------------------------------------------------
007900 LEGGI-FILE-AGGIORNAMENTI.
008000 READ FILE-AGGIORNAMENTI
008100 AT END MOVE 1 TO EOF.
008200 IF NOT EOF = 1
008300 THEN
008400 MOVE CHIAVE TO CHIAVE-K.
008500*------------------------- LIVELLO 2 -----------------------------
008600 WRITE-FILE-DA-AGGIORNARE.
008700 WRITE RECORD-DA-AGGIORNARE FROM RECORD-AGGIORNAMENTI
008800 INVALID KEY
008900 DISPLAY "ERRORE NON PREVISTO 1".
009000*-----------------------------------------------------------------
009100 REWRITE-FILE-DA-AGGIORNARE.
009200 REWRITE RECORD-DA-AGGIORNARE FROM RECORD-AGGIORNAMENTI
009300 INVALID KEY
009400 DISPLAY "ERRORE NON PREVISTO 2".
009500*
|
|
476.14
AGO-83-18: fusione tra due file sequenziali ordinati
Il programma seguente richiede la presenza di due file sequenziali, ordinati, denominati rispettivamente file-ord-1.seq
e file-ord-2.seq
. Per creare questi file si può usare il programma AGO-83-1, avendo cura di inserire una sequenza di record ordinati per codice, modificando poi il nome del file, una volta come file-ord-1.seq
e un'altra volta come file-ord-2.seq
.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-18.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 1983-06.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-ORD-1 ASSIGN TO "file-ord-1.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400 SELECT FILE-ORD-2 ASSIGN TO "file-ord-2.seq"
001500 ORGANIZATION IS SEQUENTIAL.
001600 SELECT FILE-MERGE ASSIGN TO "file-merge.seq"
001700 ORGANIZATION IS SEQUENTIAL.
001800*
001900 DATA DIVISION.
002000*
002100 FILE SECTION.
002200*
002300 FD FILE-ORD-1
002400 LABEL RECORD IS STANDARD.
002500*
002600 01 RECORD-ORD-1.
002700 02 CODICE-1 PIC 9(10) COMP.
002800 02 FILLER PIC X(75).
002900*
003000 FD FILE-ORD-2
003100 LABEL RECORD IS STANDARD.
003200*
003300 01 RECORD-ORD-2.
003400 02 CODICE-2 PIC 9(10) COMP.
003500 02 FILLER PIC X(75).
003600*
003700 FD FILE-MERGE
003800 LABEL RECORD IS STANDARD.
003900*
004000 01 RECORD-MERGE PIC X(80).
004100*
004200 WORKING-STORAGE SECTION.
004300*
004400 01 CAMPI-SCALARI.
004500 02 EOF-1 PIC 9 COMP VALUE IS 0.
004600 02 EOF-2 PIC 9 COMP VALUE IS 0.
004700*
004800 PROCEDURE DIVISION.
004900*------------------------- LIVELLO 0 -----------------------------
005000 MAIN.
005100 OPEN INPUT FILE-ORD-1.
005200 OPEN INPUT FILE-ORD-2.
005300 OPEN OUTPUT FILE-MERGE.
005400 PERFORM LETTURA-FILE-ORD-1.
005500 PERFORM LETTURA-FILE-ORD-2.
005600 PERFORM ELABORAZIONE
005700 UNTIL EOF-1 = 1 AND EOF-2 = 1.
005800 CLOSE FILE-MERGE.
005900 CLOSE FILE-ORD-2.
006000 CLOSE FILE-ORD-1.
006100 STOP RUN.
006200*------------------------- LIVELLO 1 -----------------------------
006300 ELABORAZIONE.
006400 IF (CODICE-1 <= CODICE-2 AND EOF-1 = 0) OR EOF-2 = 1
006500 THEN
006600 MOVE RECORD-ORD-1 TO RECORD-MERGE,
006700 WRITE RECORD-MERGE,
006800 PERFORM LETTURA-FILE-ORD-1;
006900 ELSE IF (CODICE-1 > CODICE-2 AND EOF-2 = 0) OR EOF-1 = 1
007000 THEN
007100 MOVE RECORD-ORD-2 TO RECORD-MERGE,
007200 WRITE RECORD-MERGE,
007300 PERFORM LETTURA-FILE-ORD-2;
007400 ELSE
007500 DISPLAY "ERRORE NON PREVISTO".
007600*------------------------- LIVELLO 2 -----------------------------
007700 LETTURA-FILE-ORD-1.
007800 READ FILE-ORD-1
007900 AT END
008000 MOVE 1 TO EOF-1.
008100*-----------------------------------------------------------------
008200 LETTURA-FILE-ORD-2.
008300 READ FILE-ORD-2
008400 AT END
008500 MOVE 1 TO EOF-2.
008600*
|
|
476.15
AGO-83-20: riordino attraverso la fusione
Il programma seguente utilizza un file sequenziale, non ordinato, denominato file-in.seq
, per generare il file file-out.seq
ordinato, utilizzando due file temporanei: file-tmp-1.seq
e file-tmp-2.seq
. Per creare il file file-in.seq
, si può usare il programma AGO-83-1, modificando poi il nome come richiesto in questo esempio.
Nella sezione 421.5.2 viene descritto il problema del riordino ottenuto attraverso la suddivisione in blocchi del file e la fusione successiva.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AGO-83-20.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-03-29.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 INPUT-OUTPUT SECTION.
000900*
001000 FILE-CONTROL.
001100*
001200 SELECT FILE-IN ASSIGN TO "file-in.seq"
001300 ORGANIZATION IS SEQUENTIAL.
001400 SELECT FILE-TMP-1 ASSIGN TO "file-tmp-1.seq"
001500 ORGANIZATION IS SEQUENTIAL.
001600 SELECT FILE-TMP-2 ASSIGN TO "file-tmp-2.seq"
001700 ORGANIZATION IS SEQUENTIAL.
001800 SELECT FILE-MERGE ASSIGN TO "file-out.seq"
001900 ORGANIZATION IS SEQUENTIAL.
002000*
002100 DATA DIVISION.
002200*
002300 FILE SECTION.
002400*
002500 FD FILE-IN
002600 LABEL RECORD IS STANDARD.
002700*
002800 01 RECORD-IN.
002900 02 CODICE-IN PIC 9(10) COMP.
003000 02 FILLER PIC X(75).
003100*
003200 FD FILE-TMP-1
003300 LABEL RECORD IS STANDARD.
003400*
003500 01 RECORD-TMP-1.
003600 02 CODICE-T1 PIC 9(10) COMP.
003700 02 FILLER PIC X(75).
003800*
003900 FD FILE-TMP-2
004000 LABEL RECORD IS STANDARD.
004100*
004200 01 RECORD-TMP-2.
004300 02 CODICE-T2 PIC 9(10) COMP.
004400 02 FILLER PIC X(75).
004500*
004600 FD FILE-MERGE
004700 LABEL RECORD IS STANDARD.
004800*
004900 01 RECORD-MERGE.
005000 02 CODICE-MERGE PIC 9(10) COMP.
005100 02 FILLER PIC X(75).
005200*
005300 WORKING-STORAGE SECTION.
005400*
005500 01 CAMPI-SCALARI.
005600 02 EOF PIC 9 COMP VALUE IS 0.
005700 02 EOF-1 PIC 9 COMP VALUE IS 0.
005800 02 EOF-2 PIC 9 COMP VALUE IS 0.
005900 02 EOB-1 PIC 9 COMP VALUE IS 0.
006000 02 EOB-2 PIC 9 COMP VALUE IS 0.
006100 02 BIFORCAZIONI PIC 9(10) COMP VALUE IS 0.
006200 02 CODICE-ORIG PIC 9(10) COMP VALUE IS 0.
006300 02 CODICE-ORIG-1 PIC 9(10) COMP VALUE IS 0.
006400 02 CODICE-ORIG-2 PIC 9(10) COMP VALUE IS 0.
006500 02 SCAMBIO PIC 9 COMP VALUE IS 0.
006600*
006700 PROCEDURE DIVISION.
006800*------------------------- LIVELLO 0 -----------------------------
006900 MAIN.
007000 PERFORM COPIA-FILE-MERGE.
007100 PERFORM BIFORCAZIONE.
007200 IF BIFORCAZIONI > 0
007300 THEN
007400 PERFORM FUSIONE,
007500 PERFORM BIFORCAZIONE-E-FUSIONE
007600 UNTIL BIFORCAZIONI <= 2.
007700 STOP RUN.
007800*------------------------- LIVELLO 1 -----------------------------
007900 COPIA-FILE-MERGE.
008000 OPEN INPUT FILE-IN.
008100 OPEN OUTPUT FILE-MERGE.
008200 MOVE ZERO TO EOF.
008300 PERFORM LETTURA-FILE-IN.
008400 PERFORM COPIA-RECORD-FILE-MERGE
008500 UNTIL EOF = 1.
008600 CLOSE FILE-MERGE.
008700 CLOSE FILE-IN.
008800*-----------------------------------------------------------------
008900 BIFORCAZIONE-E-FUSIONE.
009000 PERFORM BIFORCAZIONE.
009100 PERFORM FUSIONE.
009200*------------------------- LIVELLO 2 -----------------------------
009300 COPIA-RECORD-FILE-MERGE.
009400 MOVE RECORD-IN TO RECORD-MERGE.
009500 WRITE RECORD-MERGE.
009600 PERFORM LETTURA-FILE-IN.
009700*-----------------------------------------------------------------
009800 BIFORCAZIONE.
009900 MOVE ZERO TO BIFORCAZIONI.
010000 OPEN INPUT FILE-MERGE.
010100 OPEN OUTPUT FILE-TMP-1.
010200 OPEN OUTPUT FILE-TMP-2.
010300 MOVE ZERO TO EOF.
010400 MOVE 1 TO SCAMBIO.
010500 PERFORM LETTURA-FILE-MERGE.
010600 IF EOF = 0
010700 THEN
010800 ADD 1 TO BIFORCAZIONI,
010900 MOVE RECORD-MERGE TO RECORD-TMP-1,
011000 WRITE RECORD-TMP-1,
011100 MOVE CODICE-MERGE TO CODICE-ORIG,
011200 PERFORM LETTURA-FILE-MERGE.
011300 PERFORM BIFORCAZIONE-SUCCESSIVA
011400 UNTIL EOF = 1.
011500 CLOSE FILE-TMP-2.
011600 CLOSE FILE-TMP-1.
011700 CLOSE FILE-MERGE.
011800*-----------------------------------------------------------------
011900 FUSIONE.
012000 OPEN INPUT FILE-TMP-1.
012100 OPEN INPUT FILE-TMP-2.
012200 OPEN OUTPUT FILE-MERGE.
012300 MOVE ZERO TO EOF-1.
012400 MOVE ZERO TO EOF-2.
012500 MOVE ZERO TO EOB-1.
012600 MOVE ZERO TO EOB-2.
012700 PERFORM LETTURA-FILE-TMP-1.
012800 IF EOF-1 = 0 AND EOB-1 = 0
012900 THEN
013000 MOVE CODICE-T1 TO CODICE-ORIG-1.
013100 PERFORM LETTURA-FILE-TMP-2.
013200 IF EOF-2 = 0 AND EOB-2 = 0
013300 THEN
013400 MOVE CODICE-T2 TO CODICE-ORIG-2.
013500 PERFORM FUSIONE-SUCCESSIVA
013600 UNTIL EOF-1 = 1 AND EOF-2 = 1.
013700 CLOSE FILE-MERGE.
013800 CLOSE FILE-TMP-2.
013900 CLOSE FILE-TMP-1.
014000*------------------------- LIVELLO 3 -----------------------------
014100 BIFORCAZIONE-SUCCESSIVA.
014200 IF CODICE-MERGE >= CODICE-ORIG
014300 THEN
014400 IF SCAMBIO = 1
014500 THEN
014600 MOVE RECORD-MERGE TO RECORD-TMP-1,
014700 WRITE RECORD-TMP-1,
014800 MOVE CODICE-MERGE TO CODICE-ORIG,
014900 PERFORM LETTURA-FILE-MERGE;
015000 ELSE
015100 MOVE RECORD-MERGE TO RECORD-TMP-2,
015200 WRITE RECORD-TMP-2,
015300 MOVE CODICE-MERGE TO CODICE-ORIG,
015400 PERFORM LETTURA-FILE-MERGE;
015500 ELSE
015600 ADD 1 TO BIFORCAZIONI,
015700 MOVE CODICE-MERGE TO CODICE-ORIG,
015800 IF SCAMBIO = 1
015900 THEN
016000 MOVE 2 TO SCAMBIO;
016100 ELSE
016200 MOVE 1 TO SCAMBIO.
016300*-----------------------------------------------------------------
016400 FUSIONE-SUCCESSIVA.
016500 PERFORM FUSIONE-BLOCCO
016600 UNTIL EOB-1 = 1 AND EOB-2 = 1.
016700 IF NOT EOF-1 = 1
016800 THEN
016900 MOVE ZERO TO EOB-1.
017000 IF NOT EOF-2 = 1
017100 THEN
017200 MOVE ZERO TO EOB-2.
017300*------------------------- LIVELLO 4 -----------------------------
017400 FUSIONE-BLOCCO.
017500 IF EOB-1 = 1
017600 THEN
017700 MOVE RECORD-TMP-2 TO RECORD-MERGE,
017800 PERFORM LETTURA-FILE-TMP-2;
017900 ELSE
018000 IF EOB-2 = 1
018100 THEN
018200 MOVE RECORD-TMP-1 TO RECORD-MERGE,
018300 PERFORM LETTURA-FILE-TMP-1;
018400 ELSE
018500 IF CODICE-T1 < CODICE-T2
018600 THEN
018700 MOVE RECORD-TMP-1 TO RECORD-MERGE,
018800 PERFORM LETTURA-FILE-TMP-1;
018900 IF EOF-1 = 0 AND EOB-1 = 0
019000 THEN
019100 IF CODICE-T1 >= CODICE-ORIG-1
019200 THEN
019300 MOVE CODICE-T1
019400 TO CODICE-ORIG-1;
019500 ELSE
019600 MOVE 1 TO EOB-1;
019700 ELSE
019800 NEXT SENTENCE;
019900 ELSE
020000 MOVE RECORD-TMP-2 TO RECORD-MERGE,
020100 PERFORM LETTURA-FILE-TMP-2;
020200 IF EOF-2 = 0 AND EOB-2 = 0
020300 THEN
020400 IF CODICE-T2 >= CODICE-ORIG-2
020500 THEN
020600 MOVE CODICE-T2
020700 TO CODICE-ORIG-2;
020800 ELSE
020900 MOVE 1 TO EOB-2.
021000 WRITE RECORD-MERGE.
021200*------------------------- LIVELLO 5 -----------------------------
021300 LETTURA-FILE-IN.
021400 READ FILE-IN
021500 AT END
021600 MOVE 1 TO EOF.
021700*-----------------------------------------------------------------
021800 LETTURA-FILE-MERGE.
021900 READ FILE-MERGE
022000 AT END
022100 MOVE 1 TO EOF.
022200*-----------------------------------------------------------------
022300 LETTURA-FILE-TMP-1.
022400 READ FILE-TMP-1
022500 AT END
022600 MOVE 1 TO EOF-1,
022700 MOVE 1 TO EOB-1.
022800*-----------------------------------------------------------------
022900 LETTURA-FILE-TMP-2.
023000 READ FILE-TMP-2
023100 AT END
023200 MOVE 1 TO EOF-2,
023300 MOVE 1 TO EOB-2.
023400*
|
|
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome cobol_esempi_elementari_con_i_file.htm
[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]