COBOL-内部ソート
ファイル内のデータの並べ替えまたは2つ以上のファイルのマージは、ほとんどすべてのビジネス指向のアプリケーションで一般的に必要です。ソートは、レコードを昇順または降順で並べ替えるために使用されるため、順次処理を実行できます。COBOLでファイルをソートするために使用される2つの手法があります-
External sortJCLのSORTユーティリティを使用してファイルをソートするために使用されます。これについては、JCLの章で説明しました。今のところ、内部ソートに焦点を当てます。
Internal sort COBOLプログラム内のファイルをソートするために使用されます。 SORT 動詞はファイルをソートするために使用されます。
動詞を並べ替え
COBOLのソートプロセスでは3つのファイルが使用されます-
Input file 昇順または降順で並べ替える必要のあるファイルです。
Work fileソートプロセスの進行中にレコードを保持するために使用されます。入力ファイルレコードは、ソートプロセスのために作業ファイルに転送されます。このファイルは、SDエントリの下のファイルセクションで定義する必要があります。
Output fileソートプロセス後に取得するファイルです。これは、Sort動詞の最終出力です。
構文
以下はファイルをソートするための構文です-
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORTは次の操作を実行します-
作業ファイルをIOモードで、入力ファイルをINPUTモードで、出力ファイルをOUTPUTモードで開きます。
入力ファイルに存在するレコードを作業ファイルに転送します。
SORT-FILEをrec-keyで昇順/降順で並べ替えます。
ソートされたレコードを作業ファイルから出力ファイルに転送します。
入力ファイルと出力ファイルを閉じて、作業ファイルを削除します。
Example
次の例では、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.
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
動詞をマージする
2つ以上の同じ順序のファイルは、Mergeステートメントを使用して結合されます。マージプロセスで使用されるファイル-
- 入力ファイル-入力-1、入力-2
- 作業ファイル
- 出力ファイル
構文
以下は、2つ以上のファイルをマージするための構文です-
MERGE work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-1, input-2 GIVING output-file.
マージは次の操作を実行します-
作業ファイルをIOモードで、入力ファイルをINPUTモードで、出力ファイルをOUTPUTモードで開きます。
入力ファイルに存在するレコードを作業ファイルに転送します。
SORT-FILEをrec-keyで昇順/降順で並べ替えます。
ソートされたレコードを作業ファイルから出力ファイルに転送します。
入力ファイルと出力ファイルを閉じて、作業ファイルを削除します。
Example
次の例では、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.
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