COBOL - Clasificación interna
La clasificación de datos en un archivo o la combinación de dos o más archivos es una necesidad común en casi todas las aplicaciones orientadas a los negocios. La clasificación se utiliza para organizar los registros en orden ascendente o descendente, de modo que se pueda realizar el procesamiento secuencial. Hay dos técnicas que se utilizan para ordenar archivos en COBOL:
External sortse utiliza para ordenar archivos mediante la utilidad SORT en JCL. Hemos hablado de esto en el capítulo de JCL. A partir de ahora, nos centraremos en la clasificación interna.
Internal sort se utiliza para ordenar archivos dentro de un programa COBOL. SORT verbo se utiliza para ordenar un archivo.
Ordenar verbo
Se utilizan tres archivos en el proceso de clasificación en COBOL:
Input file es el archivo que tenemos que ordenar en orden ascendente o descendente.
Work filese utiliza para mantener registros mientras el proceso de clasificación está en curso. Los registros del archivo de entrada se transfieren al archivo de trabajo para el proceso de clasificación. Este archivo debe definirse en la sección Archivo en la entrada SD.
Output filees el archivo que obtenemos después del proceso de clasificación. Es la salida final del verbo Sort.
Sintaxis
A continuación se muestra la sintaxis para ordenar un archivo:
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT realiza las siguientes operaciones:
Abre archivo de trabajo en modo IO, archivo de entrada en modo INPUT y archivo de salida en modo OUTPUT.
Transfiere los registros presentes en el archivo de entrada al archivo de trabajo.
Ordena el SORT-FILE en secuencia ascendente / descendente por tecla rec.
Transfiere los registros ordenados del archivo de trabajo al archivo de salida.
Cierra el archivo de entrada y el archivo de salida y elimina el archivo de trabajo.
Example
En el siguiente ejemplo, INPUT es el archivo de entrada que debe ordenarse en orden ascendente:
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 para ejecutar el programa COBOL anterior -
//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
Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:
Sort Successful
Fusionar verbo
Se combinan dos o más archivos secuenciados de forma idéntica mediante la instrucción Merge. Archivos utilizados en el proceso de combinación:
- Archivos de entrada: Entrada-1, Entrada-2
- Archivo de trabajo
- Archivo de salida
Sintaxis
A continuación se muestra la sintaxis para fusionar dos o más archivos:
MERGE work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-1, input-2 GIVING output-file.
Merge realiza las siguientes operaciones:
Abre el archivo de trabajo en modo IO, los archivos de entrada en el modo INPUT y el archivo de salida en el modo OUTPUT.
Transfiere los registros presentes en los archivos de entrada al archivo de trabajo.
Ordena el SORT-FILE en secuencia ascendente / descendente por tecla rec.
Transfiere los registros ordenados del archivo de trabajo al archivo de salida.
Cierra el archivo de entrada y el archivo de salida y elimina el archivo de trabajo.
Example
En el siguiente ejemplo, INPUT1 e INPUT2 son los archivos de entrada que se fusionarán en orden ascendente:
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 para ejecutar el programa COBOL anterior -
//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
Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:
Merge Successful