COBOL - Classificação Interna
A classificação de dados em um arquivo ou a fusão de dois ou mais arquivos é uma necessidade comum em quase todos os aplicativos de negócios. A classificação é usada para organizar os registros em ordem crescente ou decrescente, de modo que o processamento sequencial possa ser executado. Existem duas técnicas que são usadas para classificar arquivos em COBOL -
External sorté usado para classificar arquivos usando o utilitário SORT em JCL. Discutimos isso no capítulo JCL. A partir de agora, vamos nos concentrar na classificação interna.
Internal sort é usado para classificar arquivos em um programa COBOL. SORT verbo é usado para classificar um arquivo.
Classificar Verbo
Três arquivos são usados no processo de classificação em COBOL -
Input file é o arquivo que devemos classificar em ordem crescente ou decrescente.
Work fileé usado para manter registros enquanto o processo de classificação está em andamento. Os registros do arquivo de entrada são transferidos para o arquivo de trabalho para o processo de classificação. Este arquivo deve ser definido na seção Arquivo na entrada SD.
Output fileé o arquivo que obtemos após o processo de classificação. É a saída final do verbo Sort.
Sintaxe
A seguir está a sintaxe para classificar um arquivo -
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT executa as seguintes operações -
Abre o arquivo de trabalho no modo IO, o arquivo de entrada no modo INPUT e o arquivo de saída no modo OUTPUT.
Transfere os registros presentes no arquivo de entrada para o arquivo de trabalho.
Classifica o SORT-FILE em sequência crescente / decrescente pela tecla rec.
Transfere os registros classificados do arquivo de trabalho para o arquivo de saída.
Fecha o arquivo de entrada e o arquivo de saída e exclui o arquivo de trabalho.
Example
No exemplo a seguir, INPUT é o arquivo de entrada que precisa ser classificado 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 COBOL acima -
//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ê compila e executa o programa acima, ele produz o seguinte resultado -
Sort Successful
Merge Verb
Dois ou mais arquivos sequenciados de forma idêntica são combinados usando a instrução Merge. Arquivos usados no processo de fusão -
- Arquivos de entrada - entrada-1, entrada-2
- Arquivo de Trabalho
- Arquivo de saída
Sintaxe
A seguir está a sintaxe 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.
Merge executa as seguintes operações -
Abre o arquivo de trabalho no modo IO, os arquivos de entrada no modo INPUT e o arquivo de saída no modo OUTPUT.
Transfere os registros presentes nos arquivos de entrada para o arquivo de trabalho.
Classifica o SORT-FILE em sequência crescente / decrescente pela tecla rec.
Transfere os registros classificados do arquivo de trabalho para o arquivo de saída.
Fecha o arquivo de entrada e o arquivo de saída e exclui o arquivo de trabalho.
Example
No exemplo a seguir, INPUT1 e INPUT2 são os arquivos de entrada que devem ser mesclados 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 COBOL acima -
//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ê compila e executa o programa acima, ele produz o seguinte resultado -
Merge Successful