A classificação dos dados em um arquivo ou uma fusão de dois ou mais arquivos é uma necessidade comum em quase todos os aplicativos comerciais. A classificação é usada para organizar os registros em ordem crescente ou decrescente, de modo que processamento seqüencial pode ser realizada. Há duas técnicas que são utilizadas para classificar os arquivos em COBOL:
Classificação externa é usada para classificar arquivos por meio do TIPO utilitário em JCL. Temos discutido este assunto, o JCL capítulo. A partir de agora, o foco será na classificação interna.
Classificação interna é utilizada para classificar os arquivos com um programa em COBOL. TIPO verbo é utilizado para classificar um arquivo.
Três arquivos são usados no processo de classificação EM COBOL:
Arquivo de entrada é o arquivo que temos de classificar em ordem crescente ou decrescente.
Trabalho arquivo é usado para manter os registros enquanto o tipo processo em curso. Arquivo de Entrada os registros são transferidos para o ficheiro de trabalho para o processo de triagem. Este arquivo deverá ser definida no File-Section em SD entrada.
Arquivo de saída é o arquivo que recebemos após processo de triagem. É o resultado final da classificação verbo.
Sintaxe é a seguinte para classificar um arquivo:
SORT work-file ON ASCENDING KEY rec-key1 [ON DESCENDING KEY rec-key2] USING input-file GIVING output-file..
TIPO realiza as seguintes operações:
Abre o trabalho de arquivo no I-O modo, arquivo de entrada no modo de entrada e saída de arquivo no modo de saída.
Transfere os registros presentes no arquivo de entrada para o trabalho de arquivo.
Classifica o tipo de arquivo em ordem ascendente/descendente seqüência pelo rec-chave.
Transfere os ordenados registros do trabalho de arquivo para a saída de arquivo.
Fecha o arquivo de entrada e a saída de arquivo e elimina o trabalho de arquivo.
Nos itens a seguir exemplo entrada é o arquivo de entrada que deve ser classificada em ordem 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 para executar o programa em 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
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
Sort Successful
Duas ou mais idêntica seqüenciados os ficheiros são combinados usando instrução Merge. Os arquivos utilizados no processo de mesclagem:
Sintaxe é a seguinte para mesclar dois ou mais arquivos:
MERGE work-file ON ASCENDING KEY rec-key1 [ON DESCENDING KEY rec-key2] USING input-1, input-2 GIVING output-file.
Mesclar realiza as seguintes operações:
Abre o trabalho de arquivo no modo I-S, entradas e arquivos no modo de entrada e saída de arquivo no modo de saída.
Transfere os registros presentes no input-files para o trabalho de arquivo.
Classifica o tipo de arquivo em ordem ascendente/descendente seqüência pelo rec-chave.
Transfere os ordenados registros do trabalho de arquivo para a saída de arquivo.
Fecha o arquivo de entrada e a saída de arquivo e elimina o trabalho de arquivo.
No exemplo a seguir, A ENTRADA1 e entrada ENTRADA2 são os arquivos que estão a ser combinadas em ordem 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 para executar o programa em 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
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
Merge Successful