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 内部排序相关推荐

  1. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  2. 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第10章  内部排序 - 直接插入排序 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课 ...

  3. 简单的选择排序(内部排序)

    1 /** 2 * 3 */ 4 package com.trfizeng.selectionsort; 5 6 /** 7 * @author trfizeng 内部排序 选择排序-简单选择排序(S ...

  4. 10-9-堆排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第10章  内部排序 - 堆排序 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码 ...

  5. 超详细!各种内部排序算法的比较

    先来个表格总结直观展示下: 各种内部排序算法的性质            算法种类                    时间复杂度  空间复 杂度 稳定性 最好情况 平均情况 最坏情况 插入排序 直 ...

  6. 直接插入排序(内部排序)

    1 package com.trfizeng.insertionsort; 2 3 /** 4 * 5 * @author trfizeng 内部排序 插入排序 --- 直接插入排序(Straight ...

  7. 万字长文总结八大经典内部排序算法

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  8. 数据结构-第九章 内部排序-知识点总结1

    第九章 内部排序 排序:重点在于对于记录的关键字进行排序,得到按关键字有序记录序列 分为:     A.内部排序: 排序过程在内存中进行      B.外部排序: 待排序记录数据量过大,需要借助外部存 ...

  9. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

    掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...

最新文章

  1. 表情包界泥石流:原本是用在人脸上的AI,拿去给Emoji提升分辨率,结果哈哈哈哈哈...
  2. python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)
  3. 普大喜奔 | Azure 免费送网站SSL证书啦!
  4. java获取音频_java获取音频文件播放时长
  5. centos7下使用git提交代码
  6. NTP授时系统(GPS时钟产品-GPS授时产品)
  7. java人账户atm模拟存款,模拟银行ATM系统(基础版)
  8. matlab实现矩形脉冲串,python中的矩形脉冲串
  9. android开源播放器代码,github上十二款最著名的Android播放器开源项目
  10. css居中显示代码怎么写,div居中代码 DIV水平居中显示CSS代码
  11. 基于WebSocket的web聊天室
  12. 卡内基梅隆计算机硕士录取案例,大神offer | 恭喜再来人学员录取卡耐基梅隆大学-机器学习硕士!...
  13. Ubuntu18及22安装NVIDIA驱动、CUDA、CUDNN、Pytorch
  14. 饿了么红包、美团优惠券开发
  15. lisp 图元 天正 自定义_AutoLISP查询图元信息
  16. 光栅原理及其c语言仿真,光栅原理及MATLAB仿真
  17. 50个Java精品源码免积分下载
  18. Java笔记018-抽象类、抽象类最佳实践-模板设计模式、接口、内部类
  19. linux下烧写atmel芯片
  20. Python 调用中控门禁并包装成webservice供移动设备调用。

热门文章

  1. 山寨精神确实很吊---编程累了大家来放松一下:)
  2. 打开第三方地图App
  3. 20190812_解决anaconda下install库的问题
  4. 流量卡之家:享受5G带来的便利 也要积极面对所带来的安全风险
  5. 流量卡之家:5G全面商用在即 这些问题应该重点关注
  6. 光敏电阻的检测方法总结
  7. 手推多分类precision(精确率)、recall(召回率)、F1分数
  8. Pytorch 中的 non_blocking
  9. 关于古老的jsp页面的知识汇总(超详细)
  10. Something about Software Engineering