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