《COBOL培训教程11.ppt》由会员分享,可在线阅读,更多相关《COBOL培训教程11.ppt(11页珍藏版)》请在优知文库上搜索。
1、排序与合并排序与合并 排序的概念:在排序的概念:在COBOLCOBOL中称排序项为中称排序项为“排序键排序键”。所谓所谓“键键”,指的是,指的是“关键字关键字”,即按哪个关键字,即按哪个关键字作为排序的依据。除了指定作为排序的依据。除了指定“排序键排序键”以外,还要以外,还要指出是按升序还是按降序排列。指出是按升序还是按降序排列。 实现排序的步骤:实现排序的步骤: (1 1)建立排序中间工作文件:将输入文件中的记录)建立排序中间工作文件:将输入文件中的记录依次输入到中间工作文件中,直到全部输完为止。依次输入到中间工作文件中,直到全部输完为止。 (2 2)对排序中间文件的各记录,按指定的排序键和
2、)对排序中间文件的各记录,按指定的排序键和升降序进行排序。排序由计算机自动进行。排序的升降序进行排序。排序由计算机自动进行。排序的对象是中间文件,不是输入文件。对象是中间文件,不是输入文件。 (3 3)将排好序的中间文件输出,由于中间文件是程)将排好序的中间文件输出,由于中间文件是程序为了排序而临时建立的文件,当程序运行结束后,序为了排序而临时建立的文件,当程序运行结束后,该文件被撤销,所以要输出到其它介质上。该文件被撤销,所以要输出到其它介质上。 由于排序需要三个文件,所以在环境部中由于排序需要三个文件,所以在环境部中要分别对三个文件进行描述。要分别对三个文件进行描述。 在数据部中,要对每一
3、个文件进行数据描在数据部中,要对每一个文件进行数据描述。输入输出文件的描述不变。排序中间述。输入输出文件的描述不变。排序中间文件的描述体以文件的描述体以SDSD开头。不必指定开头。不必指定LABEL LABEL RECORD IS STANDARDRECORD IS STANDARD,也不用组块。,也不用组块。 例:例:SD SORT-WORK-FILE DATA RECORD IS SORT-RECSD SORT-WORK-FILE DATA RECORD IS SORT-REC 过程部中主要是过程部中主要是SORTSORT语句。语句。例:例:IDENTIFICATION DIVISION.
4、IDENTIFICATION DIVISION.PROGRAM-ID. EXAM11-1.PROGRAM-ID. EXAM11-1.ENVIROMENT DIVISION.ENVIROMENT DIVISION.INPUT-OUTPUT SECTION.INPUT-OUTPUT SECTION.FILE-CONTROL.FILE-CONTROL. SELECT IN-FILE ASSIGN TO IN-FILE. SELECT IN-FILE ASSIGN TO IN-FILE. SELECT SORT-WORK-FILE ASSIGN TO SW. SELECT SORT-WORK-FILE
5、 ASSIGN TO SW. SELECT SORTED-FILE ASSIGN TO S-FILE. SELECT SORTED-FILE ASSIGN TO S-FILE.DATA DIVISION.DATA DIVISION.FILE SECTION.FILE SECTION.FD IN-FILE LABEL RECORD IS STANDARDFD IN-FILE LABEL RECORD IS STANDARD DATA RECORD IS INREC. DATA RECORD IS INREC.01 INREC.01 INREC. 02 YY-MM-DD PIC 9(6). 02
6、YY-MM-DD PIC 9(6). 02 CUSTOMER-NUM PIC 9(8). 02 CUSTOMER-NUM PIC 9(8).02 PRODUCT-CODE PIC X(6).02 PRODUCT-CODE PIC X(6).02 QTY PIC 9(6).02 QTY PIC 9(6). 02 AMOUNT PIC 9(8)V99. 02 AMOUNT PIC 9(8)V99.SD SORT-WORK-FILE.SD SORT-WORK-FILE.01 WORKREC.01 WORKREC. 02 YY-MM-DD-S PIC 9(6).02 YY-MM-DD-S PIC 9(
7、6). 02 CUSTOMER-NUM-S PIC 9(8). 02 CUSTOMER-NUM-S PIC 9(8).02 PRODUCT-CODE-S PIC X(6).02 PRODUCT-CODE-S PIC X(6).02 QTY-S PIC 9(6).02 QTY-S PIC 9(6). 02 AMOUNT-S PIC 9(8)V99. 02 AMOUNT-S PIC 9(8)V99.FD SORTED-FILE LABEL RECORD IS STANDARD.FD SORTED-FILE LABEL RECORD IS STANDARD.01 SORTEDREC PIC X(80
8、).01 SORTEDREC PIC X(80).PROCEDURE DIVISION.PROCEDURE DIVISION.SORTING.SORTING. SORT SORT-WORK-FILESORT SORT-WORK-FILE ON ASCENDING KEY CUSTOMER-NUM-S ON ASCENDING KEY CUSTOMER-NUM-S YY-MM-DD-S YY-MM-DD-S ON DESCENDING KEY AMOUNT-SON DESCENDING KEY AMOUNT-S USING IN-FILE USING IN-FILE GIVING SORTED-
9、FILE. GIVING SORTED-FILE. STOP RUN.STOP RUN. 注意:不必在过程部中打开或关闭,输入输出文注意:不必在过程部中打开或关闭,输入输出文件,它们是自动实现的。作为排序的项不能含件,它们是自动实现的。作为排序的项不能含OCCURSOCCURS项,也不能从属于含有项,也不能从属于含有OCCURSOCCURS子句的数据子句的数据项。排序项可以是组合项,但几个排序项之间不项。排序项可以是组合项,但几个排序项之间不能互相重叠。输入文件和输出文件必须是顺序文能互相重叠。输入文件和输出文件必须是顺序文件。三个文件的记录区长度一定要相等。件。三个文件的记录区长度一定要相等
10、。 SORTSORT语句的一般格式语句的一般格式1 1为:为: ASCENDING ASCENDING SORT SORT 排序中间文件名排序中间文件名 ON KEY ON KEY 数据名数据名1 1 ,数据名,数据名22 DESCENDINGDESCENDING ASCENDING ASCENDING ON KEY ON KEY 数据名数据名3 3 ,数据名,数据名44 DESCENDINGDESCENDING USING USING 输入文件名输入文件名 GIVING GIVING 输出文件名输出文件名 如果需要对输入的记录进行某些加工,然后再按如果需要对输入的记录进行某些加工,然后再按指
11、定的某些数据项的顺序排列,则需使用指定的某些数据项的顺序排列,则需使用SORTSORT语语句的第二种形式。句的第二种形式。 这种排序中要用到的两个辅助语句:这种排序中要用到的两个辅助语句: RELEASERELEASE语句:把记录从内存中送到排序中间语句:把记录从内存中送到排序中间文件中去。它的作用相当于文件中去。它的作用相当于WRITEWRITE语句。但在语句。但在这里只能用这里只能用RELEASERELEASE语句。语句。 一般格式:一般格式: RELEASE RELEASE 记录名记录名 FROM FROM 标识符标识符 RETURNRETURN语句:从排序中间文件读回一个记录到语句:从
12、排序中间文件读回一个记录到内存。相当于内存。相当于READREAD语句。语句。 一般形式:一般形式: RETURN RETURN 排序中间文件名排序中间文件名 RECORD INTORECORD INTO标识符标识符 ;AT END AT END 强制语句强制语句 例:例:IDENTIFICATION DIVISION.IDENTIFICATION DIVISION.PROGRAM-ID. EXAM11-2.PROGRAM-ID. EXAM11-2.ENVIROMENT DIVISION.ENVIROMENT DIVISION.INPUT-OUTPUT SECTION.INPUT-OUTPUT
13、 SECTION.FILE-CONTROL.FILE-CONTROL. SELECT IN-FILE ASSIGN TO IN-FILE. SELECT IN-FILE ASSIGN TO IN-FILE. SELECT SORTFILE ASSIGN TO SW. SELECT SORTFILE ASSIGN TO SW. SELECT DAFILE ASSIGN TO DA-FILE. SELECT DAFILE ASSIGN TO DA-FILE. SELECT OUTFILE ASSIGN TO OUT-FILE. SELECT OUTFILE ASSIGN TO OUT-FILE.D
14、ATA DIVISION.DATA DIVISION.FILE SECTION.FILE SECTION.FD INFILE LABEL RECORD IS STANDARDFD INFILE LABEL RECORD IS STANDARD DATA RECORD IS INREC. DATA RECORD IS INREC.01 INREC.01 INREC. 02 WORKING-NUM PIC 9(6). 02 WORKING-NUM PIC 9(6). 02 SHOP-NUM PIC 9(2). 02 SHOP-NUM PIC 9(2). 02 ACTUAL-HOURS PIC 9(
15、3)V9. 02 ACTUAL-HOURS PIC 9(3)V9. 02 OVERTIME PIC 9(3)V9. 02 OVERTIME PIC 9(3)V9.SD SORTFILE .SD SORTFILE .01 SORTREC.01 SORTREC. 02 WORKING-NUM PIC 9(6). 02 WORKING-NUM PIC 9(6). 02 SHOP-NUM PIC 9(2). 02 SHOP-NUM PIC 9(2). 02 ACTUAL-HOURS PIC 9(3)V9. 02 ACTUAL-HOURS PIC 9(3)V9. 02 OVERTIME PIC 9(3)
16、V9. 02 OVERTIME PIC 9(3)V9.FD DAFILE LABEL RECORD IS STANDARD.FD DAFILE LABEL RECORD IS STANDARD.01 DAREC.01 DAREC. 02 WORKING-NUM PIC 9(6). 02 WORKING-NUM PIC 9(6). 02 SHOP-NUM PIC 9(2). 02 SHOP-NUM PIC 9(2). 02 ACTUAL-HOURS PIC 9(3)V9. 02 ACTUAL-HOURS PIC 9(3)V9. 02 OVERTIME PIC 9(3)V9. 02 OVERTIME PIC 9(3)V9.FD OUTFILE LABEL RECORD IS STANDARD.FD OUTFILE LABEL RECORD IS STANDARD.01 OUTREC.01 OUTREC. 02 FILLER PIC X(4). 02 FILLER PIC X(4). 02 WORKING-NUM PIC 9(6). 02 WORKING-NUM PIC 9(6). 02 F