Cobol-internal-sort

提供:Dev Guides
移動先:案内検索

COBOL-内部ソート

ファイル内のデータのソートまたは2つ以上のファイルのマージは、ほとんどすべてのビジネス指向のアプリケーションで共通の必要性です。 ソートは、レコードを昇順または降順で配列するために使用されるため、順次処理を実行できます。 COBOLでファイルをソートするために使用される2つの技術があります-

  • *外部ソート*は、JCLのSORTユーティリティを使用してファイルをソートするために使用されます。 これについては、JCLの章で説明しました。 今のところ、内部ソートに焦点を当てます。
  • 内部ソート*は、COBOLプログラム内のファイルをソートするために使用されます。 *SORT 動詞は、ファイルのソートに使用されます。

動詞の並べ替え

COBOLのソートプロセスでは3つのファイルが使用されます-

  • *入力ファイル*は、昇順または降順でソートする必要があるファイルです。
  • *ワークファイル*は、ソートプロセスの進行中にレコードを保持するために使用されます。 入力ファイルのレコードは、ソートプロセスのためにワークファイルに転送されます。 このファイルは、SDエントリの下のファイルセクションで定義する必要があります。
  • *出力ファイル*は、ソート処理後に取得されるファイルです。 これは、ソート動詞の最終出力です。

構文

以下は、ファイルをソートするための構文です-

SORT work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.

SORTは次の操作を実行します-

  • ワークファイルをI-Oモードで、入力ファイルをINPUTモードで、出力ファイルをOUTPUTモードで開きます。
  • 入力ファイルにあるレコードをワークファイルに転送します。
  • SORT-FILEをrec-keyで昇順/降順でソートします。
  • ワークファイルから出力ファイルにソートされたレコードを転送します。
  • 入力ファイルと出力ファイルを閉じて、ワークファイルを削除します。

次の例では、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

動詞を結合

Mergeステートメントを使用して、2つ以上の同じ順序のファイルを結合します。 マージプロセスで使用されるファイル-

  • 入力ファイル-入力1、入力2
  • ワークファイル
  • 出力ファイル

構文

以下は、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モードで開きます。
  • 入力ファイルにあるレコードをワークファイルに転送します。
  • SORT-FILEをrec-keyで昇順/降順でソートします。
  • ワークファイルから出力ファイルにソートされたレコードを転送します。
  • 入力ファイルと出力ファイルを閉じて、ワークファイルを削除します。

次の例では、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