Clasificación de los datos en un archivo o la fusión de dos o más archivos es una necesidad común en casi todas las aplicaciones orientadas a negocios. Clasificación se utiliza para organizar los registros en orden ascendente o descendente, de modo que procesamiento secuencial se puede realizar. Hay dos técnicas que se utilizan para ordenar los archivos de COBOL:
Tipo Externo se utiliza para ordenar los archivos mediante el tipo de utilidad. Esto lo hemos discutido en el JCL capítulo. En la actualidad, se centrará en clasificación interna.
Clasificación interna se utiliza para ordenar los archivos en un programa COBOL. TIPO verbo se utiliza para ordenar un archivo.
Tres archivos se utilizan en el proceso de ordenar COBOL:
Archivo de entrada es el archivo que tenemos que ordenar en orden ascendente o descendente.
Archivo de trabajo se utiliza para mantener registros mientras el tipo está en proceso. Registros del archivo de entrada se transfieren al archivo de trabajo para el proceso de selección. Este archivo se debe definir en la File-Section bajo SD entrada.
Archivo de salida es el archivo que se obtiene después de la clasificación. Es el resultado final del tipo verbo.
Siguiente es 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.
TIPO realiza las siguientes operaciones:
Trabajo de archivo se abre en el I-O, archivo-de-entrada en el modo de entrada y salida de archivo en el modo de salida.
Transfiere los registros en el archivo de entrada para el trabajo de archivo.
Tipo el tipo de archivo en orden ascendente/descendente secuencia de rec.
Transfiere los registros ordenados por el trabajo de archivo en el archivo de salida.
Cierra el archivo de entrada y el archivo de salida y elimina el trabajo de archivo.
En el siguiente ejemplo, la entrada es el archivo de entrada que tiene que ser 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:
//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 se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:
Sort Successful
Dos o más archivos secuencia idéntica se combinan utilizando instrucción Merge. Archivos utilizados en el proceso de combinación:
Siguiente es la sintaxis para combinar 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.
Combinar realiza las siguientes operaciones:
Se abre el trabajo de archivo en el I-O modo de entrada, de los archivos en el modo de entrada y salida de archivo en el modo de salida.
Transferencias los registros presentes en la entrada de los archivos en el trabajo de archivo.
Tipo el tipo de archivo en orden ascendente/descendente secuencia de rec.
Transfiere los registros ordenados por el trabajo de archivo en el archivo de salida.
Cierra el archivo de entrada y el archivo de salida y elimina el trabajo de archivo.
En el siguiente ejemplo, ENTRADA1 y entrada ENTRADA2 son los archivos que se van a unir 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:
//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 se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:
Merge Successful