- COBOL 教程
- COBOL - 首页
- COBOL - 概述
- COBOL - 环境设置
- COBOL - 程序结构
- COBOL - 基本语法
- COBOL - 数据类型
- COBOL - 基本动词
- COBOL - 数据布局
- COBOL - 条件语句
- COBOL - 循环语句
- COBOL - 字符串处理
- COBOL - 表格处理
- COBOL - 文件处理
- COBOL - 文件组织
- COBOL - 文件访问模式
- COBOL - 文件处理动词
- COBOL - 子程序
- COBOL - 内部排序
- COBOL - 数据库接口
- COBOL 有用资源
- COBOL - 问答
- COBOL - 快速指南
- COBOL - 有用资源
COBOL - 内部排序
在几乎所有面向业务的应用程序中,对文件中的数据进行排序或合并两个或多个文件都是常见的需求。排序用于按升序或降序排列记录,以便可以执行顺序处理。COBOL 中使用两种技术对文件进行排序:
外部排序使用 JCL 中的 SORT 实用程序对文件进行排序。我们在 JCL 章节中讨论过这一点。目前,我们将重点关注内部排序。
内部排序用于在 COBOL 程序中对文件进行排序。使用SORT动词对文件进行排序。
Sort 动词
COBOL 中的排序过程使用三个文件:
输入文件是我们需要按升序或降序排序的文件。
工作文件用于在排序过程进行时保存记录。输入文件记录被传输到工作文件以进行排序过程。此文件应在 File-Section 的 SD 条目下定义。
输出文件是排序过程结束后获得的文件。它是 Sort 动词的最终输出。
语法
以下是排序文件的语法:
SORT work-file ON ASCENDING KEY rec-key1 [ON DESCENDING KEY rec-key2] USING input-file GIVING output-file.
SORT 执行以下操作:
以 I-O 模式打开工作文件,以 INPUT 模式打开输入文件,以 OUTPUT 模式打开输出文件。
将输入文件中存在的记录传输到工作文件。
按 rec-key 以升序/降序对 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.
执行上述 COBOL 程序的JCL:
//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 动词
使用 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.
Merge 执行以下操作:
以 I-O 模式打开工作文件,以 INPUT 模式打开输入文件,以 OUTPUT 模式打开输出文件。
将输入文件中存在的记录传输到工作文件。
按 rec-key 以升序/降序对 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.
执行上述 COBOL 程序的JCL:
//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
编译并执行上述程序后,会产生以下结果:
Merge Successful
