- 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
