COBOL - Ordinamento interno
L'ordinamento dei dati in un file o l'unione di due o più file è una necessità comune in quasi tutte le applicazioni aziendali. L'ordinamento viene utilizzato per disporre i record in ordine crescente o decrescente, in modo che sia possibile eseguire l'elaborazione sequenziale. Esistono due tecniche utilizzate per ordinare i file in COBOL:
External sortviene utilizzato per ordinare i file utilizzando l'utilità SORT in JCL. Ne abbiamo discusso nel capitolo JCL. A partire da ora, ci concentreremo sull'ordinamento interno.
Internal sort viene utilizzato per ordinare i file all'interno di un programma COBOL. SORT verbo viene utilizzato per ordinare un file.
Ordina verbo
Tre file vengono utilizzati nel processo di ordinamento in COBOL:
Input file è il file che dobbiamo ordinare in ordine crescente o decrescente.
Work fileviene utilizzato per conservare i record durante il processo di ordinamento. I record del file di input vengono trasferiti al file di lavoro per il processo di ordinamento. Questo file dovrebbe essere definito nella sezione File sotto la voce SD.
Output fileè il file che otteniamo dopo il processo di ordinamento. È l'output finale del verbo Sort.
Sintassi
Di seguito è riportata la sintassi per ordinare un file:
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT esegue le seguenti operazioni:
Apre il file di lavoro in modalità IO, il file di input in modalità INPUT e il file di output in modalità OUTPUT.
Trasferisce i record presenti nel file di input nel file di lavoro.
Ordina il SORT-FILE in sequenza ascendente / discendente tramite il tasto rec.
Trasferisce i record ordinati dal file di lavoro al file di output.
Chiude il file di input e il file di output ed elimina il file di lavoro.
Example
Nel seguente esempio, INPUT è il file di input che deve essere ordinato in ordine crescente -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT ASSIGN TO IN.
SELECT OUTPUT ASSIGN TO OUT.
SELECT WORK ASSIGN TO WRK.
DATA DIVISION.
FILE SECTION.
FD INPUT.
01 INPUT-STUDENT.
05 STUDENT-ID-I PIC 9(5).
05 STUDENT-NAME-I PIC A(25).
FD OUTPUT.
01 OUTPUT-STUDENT.
05 STUDENT-ID-O PIC 9(5).
05 STUDENT-NAME-O PIC A(25).
SD WORK.
01 WORK-STUDENT.
05 STUDENT-ID-W PIC 9(5).
05 STUDENT-NAME-W PIC A(25).
PROCEDURE DIVISION.
SORT WORK ON ASCENDING KEY STUDENT-ID-O
USING INPUT GIVING OUTPUT.
DISPLAY 'Sort Successful'.
STOP RUN.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN DD DSN = INPUT-FILE-NAME,DISP = SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP = SHR
//WRK DD DSN = &&TEMP
Quando compili ed esegui il programma sopra, produce il seguente risultato:
Sort Successful
Unisci verbo
Due o più file in sequenza identica vengono combinati utilizzando l'istruzione Merge. File utilizzati nel processo di unione -
- File di input - Input-1, Input-2
- File di lavoro
- File di uscita
Sintassi
Di seguito è riportata la sintassi per unire due o più file:
MERGE work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-1, input-2 GIVING output-file.
Unisci esegue le seguenti operazioni:
Apre il file di lavoro in modalità IO, i file di input in modalità INPUT e il file di output in modalità OUTPUT.
Trasferisce i record presenti nei file di input nel file di lavoro.
Ordina il SORT-FILE in sequenza ascendente / discendente tramite il tasto rec.
Trasferisce i record ordinati dal file di lavoro al file di output.
Chiude il file di input e il file di output ed elimina il file di lavoro.
Example
Nell'esempio seguente, INPUT1 e INPUT2 sono i file di input che devono essere uniti in ordine crescente -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT1 ASSIGN TO IN1.
SELECT INPUT2 ASSIGN TO IN2.
SELECT OUTPUT ASSIGN TO OUT.
SELECT WORK ASSIGN TO WRK.
DATA DIVISION.
FILE SECTION.
FD INPUT1.
01 INPUT1-STUDENT.
05 STUDENT-ID-I1 PIC 9(5).
05 STUDENT-NAME-I1 PIC A(25).
FD INPUT2.
01 INPUT2-STUDENT.
05 STUDENT-ID-I2 PIC 9(5).
05 STUDENT-NAME-I2 PIC A(25).
FD OUTPUT.
01 OUTPUT-STUDENT.
05 STUDENT-ID-O PIC 9(5).
05 STUDENT-NAME-O PIC A(25).
SD WORK.
01 WORK-STUDENT.
05 STUDENT-ID-W PIC 9(5).
05 STUDENT-NAME-W PIC A(25).
PROCEDURE DIVISION.
MERGE WORK ON ASCENDING KEY STUDENT-ID-O
USING INPUT1, INPUT2 GIVING OUTPUT.
DISPLAY 'Merge Successful'.
STOP RUN.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN=INPUT1-FILE-NAME,DISP=SHR
//IN2 DD DSN=INPUT2-FILE-NAME,DISP=SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP=SHR
//WRK DD DSN = &&TEMP
Quando compili ed esegui il programma sopra, produce il seguente risultato:
Merge Successful