Учебники

КОБОЛ — Внутренняя сортировка

Сортировка данных в файле или объединение двух или более файлов является общей необходимостью почти во всех бизнес-ориентированных приложениях. Сортировка используется для упорядочения записей в порядке возрастания или убывания, чтобы можно было выполнять последовательную обработку. Есть две техники, которые используются для сортировки файлов в COBOL —

  • Внешняя сортировка используется для сортировки файлов с помощью утилиты SORT в JCL. Мы обсуждали это в главе JCL. На данный момент мы сосредоточимся на внутренней сортировке.

  • Внутренняя сортировка используется для сортировки файлов в программе на языке COBOL. Глагол SORT используется для сортировки файла.

Внешняя сортировка используется для сортировки файлов с помощью утилиты SORT в JCL. Мы обсуждали это в главе JCL. На данный момент мы сосредоточимся на внутренней сортировке.

Внутренняя сортировка используется для сортировки файлов в программе на языке COBOL. Глагол SORT используется для сортировки файла.

Сортировать глагол

Три файла используются в процессе сортировки в COBOL —

  • Входной файл — это файл, который мы должны отсортировать в порядке возрастания или убывания.

  • Рабочий файл используется для хранения записей во время процесса сортировки. Записи входного файла переносятся в рабочий файл для процесса сортировки. Этот файл должен быть определен в разделе «Файл» в разделе «Запись SD».

  • Выходной файл — это файл, который мы получаем после процесса сортировки. Это конечный результат сортировки глагола.

Входной файл — это файл, который мы должны отсортировать в порядке возрастания или убывания.

Рабочий файл используется для хранения записей во время процесса сортировки. Записи входного файла переносятся в рабочий файл для процесса сортировки. Этот файл должен быть определен в разделе «Файл» в разделе «Запись SD».

Выходной файл — это файл, который мы получаем после процесса сортировки. Это конечный результат сортировки глагола.

Синтаксис

Ниже приведен синтаксис для сортировки файла —

SORT work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.

SORT выполняет следующие операции —

  • Открывает рабочий файл в режиме ввода-вывода, входной файл в режиме INPUT и выходной файл в режиме OUTPUT.

  • Переносит записи, присутствующие во входном файле, в рабочий файл.

  • Сортирует SORT-FILE в порядке возрастания / убывания по ключу записи.

  • Переносит отсортированные записи из рабочего файла в выходной файл.

  • Закрывает входной файл и выходной файл и удаляет рабочий файл.

Открывает рабочий файл в режиме ввода-вывода, входной файл в режиме INPUT и выходной файл в режиме OUTPUT.

Переносит записи, присутствующие во входном файле, в рабочий файл.

Сортирует SORT-FILE в порядке возрастания / убывания по ключу записи.

Переносит отсортированные записи из рабочего файла в выходной файл.

Закрывает входной файл и выходной файл и удаляет рабочий файл.

пример

В следующем примере INPUT — это входной файл, который необходимо отсортировать в порядке возрастания.

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 для выполнения вышеуказанной программы 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

Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —

Sort Successful

Объединить глагол

Два или более идентично упорядоченных файла объединяются с помощью оператора Merge. Файлы, используемые в процессе слияния —

  • Входные файлы — Input-1, Input-2
  • Рабочий файл
  • Выходной файл

Синтаксис

Ниже приведен синтаксис для объединения двух или более файлов:

MERGE work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]

USING input-1, input-2 GIVING output-file.

Слияние выполняет следующие операции —

  • Открывает рабочий файл в режиме IO, входные файлы в режиме INPUT и выходной файл в режиме OUTPUT.

  • Переносит записи, присутствующие во входных файлах, в рабочий файл.

  • Сортирует SORT-FILE в порядке возрастания / убывания по ключу записи.

  • Переносит отсортированные записи из рабочего файла в выходной файл.

  • Закрывает входной файл и выходной файл и удаляет рабочий файл.

Открывает рабочий файл в режиме IO, входные файлы в режиме INPUT и выходной файл в режиме OUTPUT.

Переносит записи, присутствующие во входных файлах, в рабочий файл.

Сортирует SORT-FILE в порядке возрастания / убывания по ключу записи.

Переносит отсортированные записи из рабочего файла в выходной файл.

Закрывает входной файл и выходной файл и удаляет рабочий файл.

пример

В следующем примере INPUT1 и INPUT2 являются входными файлами, которые должны быть объединены в порядке возрастания:

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 для выполнения вышеуказанной программы 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

Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —