Сортировка данных в файле или объединение двух или более файлов является общей необходимостью почти во всех бизнес-ориентированных приложениях. Сортировка используется для упорядочения записей в порядке возрастания или убывания, чтобы можно было выполнять последовательную обработку. Есть две техники, которые используются для сортировки файлов в 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
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —