C16-COBOL 内部排序
COBOL 内部排序
在几乎所有面向业务的应用程序中,对文件中的数据进行排序或合并两个或多个文件是常见的需求。排序是用于以升序或降序排列记录,以便可以执行顺序处理。有两种技术用于在COBOL中排序文件:
- **外部排序:**通过使用JCL中的SORT工具对文件进行排序。我们已经在JCL章节中讨论过。目前,我们将关注内部排序。
- **内部排序:**用于对COBOL程序内的文件进行排序。SORT动词用于对文件进行排序。
Sort(排序)动词
在COBOL的排序进程中使用的三个文件:
- **Input file:**是我们必须按升序或降序排序的文件。
- **Work file:**用于在排序进程正在进行时保存记录。输入文件记录被传送到工作文件进行排序进程。该文件应该在SD条目下的文件节(file section)中定义。
- **Output file:**是我们在排序进程之后得到的文件。它是排序动词的最终输出。
语法
以下是排序文件的语法:
SORT work-file ON ASCENDING KEY rec-key1[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT执行以下操作:
- 在I-O模式下打开work-file,在INPUT模式下打开input-file,在OUTPUT模式下打开output-file。
- 将input-file中存在的记录传送到work-file。
- 通过rec-key按升序/降序排序SORT-FILE。
- 将排序的记录从work-file传送到output-file。
- 关闭input-file和output-file,删除work-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-OUSING 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
- 工作文件:work-file
- 输出文件:output-file
语法
以下是合并两个或多个文件的语法:
MERGE work-file ON ASCENDING KEY rec-key1[ON DESCENDING KEY rec-key2]USING input-1, input-2 GIVING output-file.
MERGE执行以下操作:
- 在I-O模式下打开work-file,在INPUT模式下打开input-file,在OUTPUT模式下打开output-file。
- 将input-file中存在的记录传送到work-file。
- 通过rec-key按升序/降序排序SORT-FILE。
- 将排序的记录从work-file传送到output-file。
- 关闭input-file和output-file,删除work-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-OUSING 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
当你编译和执行上面的程序,会产生以下结果:
Merge Successful
C16-COBOL 内部排序相关推荐
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第10章 内部排序 - 直接插入排序 --<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课 ...
- 简单的选择排序(内部排序)
1 /** 2 * 3 */ 4 package com.trfizeng.selectionsort; 5 6 /** 7 * @author trfizeng 内部排序 选择排序-简单选择排序(S ...
- 10-9-堆排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第10章 内部排序 - 堆排序 --<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码 ...
- 超详细!各种内部排序算法的比较
先来个表格总结直观展示下: 各种内部排序算法的性质 算法种类 时间复杂度 空间复 杂度 稳定性 最好情况 平均情况 最坏情况 插入排序 直 ...
- 直接插入排序(内部排序)
1 package com.trfizeng.insertionsort; 2 3 /** 4 * 5 * @author trfizeng 内部排序 插入排序 --- 直接插入排序(Straight ...
- 万字长文总结八大经典内部排序算法
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 数据结构-第九章 内部排序-知识点总结1
第九章 内部排序 排序:重点在于对于记录的关键字进行排序,得到按关键字有序记录序列 分为: A.内部排序: 排序过程在内存中进行 B.外部排序: 待排序记录数据量过大,需要借助外部存 ...
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...
最新文章
- 表情包界泥石流:原本是用在人脸上的AI,拿去给Emoji提升分辨率,结果哈哈哈哈哈...
- python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)
- 普大喜奔 | Azure 免费送网站SSL证书啦!
- java获取音频_java获取音频文件播放时长
- centos7下使用git提交代码
- NTP授时系统(GPS时钟产品-GPS授时产品)
- java人账户atm模拟存款,模拟银行ATM系统(基础版)
- matlab实现矩形脉冲串,python中的矩形脉冲串
- android开源播放器代码,github上十二款最著名的Android播放器开源项目
- css居中显示代码怎么写,div居中代码 DIV水平居中显示CSS代码
- 基于WebSocket的web聊天室
- 卡内基梅隆计算机硕士录取案例,大神offer | 恭喜再来人学员录取卡耐基梅隆大学-机器学习硕士!...
- Ubuntu18及22安装NVIDIA驱动、CUDA、CUDNN、Pytorch
- 饿了么红包、美团优惠券开发
- lisp 图元 天正 自定义_AutoLISP查询图元信息
- 光栅原理及其c语言仿真,光栅原理及MATLAB仿真
- 50个Java精品源码免积分下载
- Java笔记018-抽象类、抽象类最佳实践-模板设计模式、接口、内部类
- linux下烧写atmel芯片
- Python 调用中控门禁并包装成webservice供移动设备调用。