COBOLCOBOL培训教程培训教程(十一)(十一)讲师:李金鹏排序与合并•排序的概念:在COBOL中称排序项为“排序键”。所谓“键”,指的是“关键字”,即按哪个关键字作为排序的依据。除了指定“排序键”以外,还要指出是按升序还是按降序排列。•实现排序的步骤:(1)建立排序中间工作文件:将输入文件中的记录依次输入到中间工作文件中,直到全部输完为止。(2)对排序中间文件的各记录,按指定的排序键和升降序进行排序。排序由计算机自动进行。排序的对象是中间文件,不是输入文件。(3)将排好序的中间文件输出,由于中间文件是程序为了排序而临时建立的文件,当程序运行结束后,该文件被撤销,所以要输出到其它介质上。排序的概念与步骤排序的概念与步骤•由于排序需要三个文件,所以在环境部中要分别对三个文件进行描述。•在数据部中,要对每一个文件进行数据描述。输入输出文件的描述不变。排序中间文件的描述体以SD开头。不必指定LABELRECORDISSTANDARD,也不用组块。例:SDSORT-WORK-FILEDATARECORDISSORT-REC•过程部中主要是SORT语句。COBOLCOBOL中与排序有关的成分中与排序有关的成分例:IDENTIFICATIONDIVISION.PROGRAM-ID.EXAM11-1.ENVIROMENTDIVISION.INPUT-OUTPUTSECTION.FILE-CONTROL.SELECTIN-FILEASSIGNTOIN-FILE.SELECTSORT-WORK-FILEASSIGNTOSW.SELECTSORTED-FILEASSIGNTOS-FILE.DATADIVISION.FILESECTION.FDIN-FILELABELRECORDISSTANDARDDATARECORDISINREC.01INREC.02YY-MM-DDPIC9(6).02CUSTOMER-NUMPIC9(8).02PRODUCT-CODEPICX(6).02QTYPIC9(6).02AMOUNTPIC9(8)V99.SDSORT-WORK-FILE.01WORKREC.02YY-MM-DD-SPIC9(6).02CUSTOMER-NUM-SPIC9(8).02PRODUCT-CODE-SPICX(6).02QTY-SPIC9(6).02AMOUNT-SPIC9(8)V99.FDSORTED-FILELABELRECORDISSTANDARD.01SORTEDRECPICX(80).PROCEDUREDIVISION.SORTING.SORTSORT-WORK-FILEONASCENDINGKEYCUSTOMER-NUM-SYY-MM-DD-SONDESCENDINGKEYAMOUNT-SUSINGIN-FILEGIVINGSORTED-FILE.STOPRUN.SORTSORT语句的第一种形式语句的第一种形式(一)(一)•注意:不必在过程部中打开或关闭,输入输出文件,它们是自动实现的。作为排序的项不能含OCCURS项,也不能从属于含有OCCURS子句的数据项。排序项可以是组合项,但几个排序项之间不能互相重叠。输入文件和输出文件必须是顺序文件。三个文件的记录区长度一定要相等。•SORT语句的一般格式1为:ASCENDINGSORT排序中间文件名ONKEY数据名1[,数据名2]…DESCENDINGASCENDINGONKEY数据名3[,数据名4]…DESCENDINGUSING输入文件名GIVING输出文件名SORTSORT语句的第一种形式(二)语句的第一种形式(二)•如果需要对输入的记录进行某些加工,然后再按指定的某些数据项的顺序排列,则需使用SORT语句的第二种形式。•这种排序中要用到的两个辅助语句:RELEASE语句:把记录从内存中送到排序中间文件中去。它的作用相当于WRITE语句。但在这里只能用RELEASE语句。一般格式:RELEASE记录名[FROM标识符]RETURN语句:从排序中间文件读回一个记录到内存。相当于READ语句。一般形式:RETURN排序中间文件名RECORD[INTO标识符][;ATEND强制语句]SORTSORT语句的第二种形式语句的第二种形式(一)(一)例:IDENTIFICATIONDIVISION.PROGRAM-ID.EXAM11-2.ENVIROMENTDIVISION.INPUT-OUTPUTSECTION.FILE-CONTROL.SELECTIN-FILEASSIGNTOIN-FILE.SELECTSORTFILEASSIGNTOSW.SELECTDAFILEASSIGNTODA-FILE.SELECTOUTFILEASSIGNTOOUT-FILE.DATADIVISION.FILESECTION.FDINFILELABELRECORDISSTANDARDDATARECORDISINREC.01INREC.02WORKING-NUMPIC9(6).02SHOP-NUMPIC9(2).02ACTUAL-HOURSPIC9(3)V9.02OVERTIMEPIC9(3)V9.SDSORTFILE.01SORTREC.02WORKING-NUMPIC9(6).02SHOP-NUMPIC9(2).02ACTUAL-HOURSPIC9(3)V9.02OVERTIMEPIC9(3)V9.FDDAFILELABELRECORDISSTANDARD.01DAREC.02WORKING-NUMPIC9(6).02SHOP-NUMPIC9(2).02ACTUAL-HOURSPIC9(3)V9.02OVERTIMEPIC9(3)V9.FDOUTFILELABELRECORDISSTANDARD.01OUTREC.02FILLERPICX(4).02WORKING-NUMPIC9(6).02FILLERPICX(4).02SHOP-NUMPIC9(2).02FILLERPICX(4).02ACTUAL-HOURSP...