COBOL言語の「RELEASE文」と整列用ファイルの関係とは? | 用語辞典

COBOL(コボル)言語の予約語RELEASEを使った命令文の書き方とは

辞典・辞書-RELEASE-イメージ

COBOL(コボル)言語のRELEASE文とは?

COBOL(コボル)におけるRELEASE文は、ファイルの内容をソートするときに使用する整列併合用ファイル(ソート処理用ファイル)に、指定したレコードを書き込むときに使用する命令文です。

本記事では、RELEASE文の基本的な使い方やルール、注意点などをご紹介します。

なお、RELEASE文はSORT文に付随した命令文のため、SORT文の基本的な理解が必須となります。

SORT文については「COBOL言語の「SORT文」を活用してファイル整理をしよう!|用語辞典」で詳しく解説しています。

基本的にSORT文を使用してソートを行うときは、ソート対象ファイルを読み込み、ソートを行う作業領域である並列併合用ファイルを使用してソートを行い、結果出力用ファイルにソート結果を出力します。

しかし、ある条件に一致したレコードのみをソートしたい場合、ソート対象のレコードのみをRELEASE文を使用して、整列併合用ファイルに書き込む必要があります。

書き方1-1:(RELEASE文使用時のSORT文の設定)

SORT文でRELEASE文を使用する場合は、INPUT PROCEDURE(入力手続き)とOUTPUT PROCEDURE(出力手続き)をそれぞれ指定する必要があります。

SORT [ソート作業領域項目]

 [ASCENDING(昇順)又はDESCENDING(降順)] KEY [ソートキー項目]

 INPUT PROCEDURE [サブルーチン名]

 OUTPUT PROCEDURE [サブルーチン名].

書き方1-2:(RELEASE文の設定)

ソート前に整列併合用ファイルにレコードを書き込む場合に指定します。

RELEASE [出力レコード名]

RELEASE文を実行すると、出力レコードに対応する整列併合用ファイルに、出力レコードの内容が書き込まれます。

整列併合用ファイルのOPENは、SORT文で自動で行われるため不要です。

書き方1-1、1-2を踏まえて、実際にソート対象ファイルの内容を、RELEASE文を使用して整列併合用ファイルに書き込む簡単なサンプルを以下に紹介します。

ソート対象ファイルは事前に用意しておきます。 ここでは、行順編成のフラット形式で以下のようにレコードを記述します。

test.txt-------------------

11111AAAaaaaa

22222BBBbbbbb

44444DDDddddd

33333CCCccccc

----------------------------

使用例:(1/2)

辞典・辞書-RELEASE-使用例:(1/2)

使用例:(2/2)

辞典・辞書-RELEASE-使用例:(2/2)

実行結果:

辞典・辞書-RELEASE-実行結果:

紹介したサンプルでは、SORT文でソートを行う前に実行するサブルーチンを指定しています。

サブルーチンのRELEASE-PROCで、ソート対象用ファイルのオープン及び、PERFORM文でサブルーチンのRELEASE-MAIN-PROCを呼び出し、ファイルのレコードが無くなるまでループしています。

RELEASE-MAIN-PROCでは、整列併合用ファイルにソート対象レコードを、そのままRELEASE文に書き込んでいるだけのシンプルな内容となります。

実際には、RELEASE文で整列併合用ファイルに書き込んだあとは、RETURN文を使用して整列併合用ファイルを読み込み、ソート結果を結果出力用のファイルに書き込む必要があります。

RETURN文については「COBOL言語の「RETURN文」と整列用ファイルの関係とは?|用語辞典」で詳しく解説しています。

RELEASE文のCOBOL(コボル)言語における基本事項やルールについて

  1. RELEASE文と出力レコードの間の空白は自由に設定できます。
  2. RELEASE文を実行すると、整列併合用ファイルにソート対象のレコードが書き込まれます。
  3. SORT文のINPUT PROCEDUREには、整列併合用ファイルへデータの引渡しを行うサブルーチンを指定します。
  4. SORT文のOUTPUT PROCEDUREには、ソート実施後に実行するサブルーチンを指定します。このサブルーチンでは、整列併合用ファイルを使用して処理を行うのが基本です。

COBOL(コボル)言語のRELEASE文を扱う上での注意点

  1. 整列併合用ファイルは、COBOLプログラムがソートで一時的に入出力を行うファイルのため、ファイルの実体はありません。
  2. SORT文のINPUT PROCEDUREとOUTPUT PROCEDUREは、必ずセットで記述する必要があります。どちらか片方のみ指定した場合は、以下のようにコンパイルエラーとなります。

辞典・辞書-RELEASE-エラー例

RELEASE文を使ったCOBOL(コボル)プログラムの活用法

実際に指定したレコードのみをRELEASE文を使用して、並列併合用ファイルに書き込む場合はIF文などを使用して、ソート対象レコードを判定する必要があります。

以下にソートキーが11111の場合のみ、並列併合用ファイルに書き込む処理のサンプルを紹介します。

ソート対象ファイルは、行順編成のフラット形式で以下のようにレコードを記述しておきます。

test.txt-------------------

11111AAAaaaaa

22222BBBbbbbb

11111BBBbbbbb

44444DDDddddd

11111DDDddddd

11111CCCccccc

33333CCCccccc

----------------------------

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. RELEASE_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. FILE-CONTROL.
  6. SELECT TEST-FILE ASSIGN TO 'test.txt' *>ソート対象ファイル
  7. ORGANIZATION IS LINE SEQUENTIAL
  8. STATUS IS IN-FIlE-STATUS.
  9. SELECT KEKKA-FILE ASSIGN TO 'kekka.txt' *>結果出力用ファイル
  10. ORGANIZATION IS LINE SEQUENTIAL.
  11. SELECT SORT-FILE ASSIGN TO 'sort.wrk'. *>作業領域
  12. DATA DIVISION.
  13. FILE SECTION.
  14. FD TEST-FILE.
  15. 01 TEST-RECORD.
  16. 05 NO-CORD PIC 9(5).
  17. 05 DATA-1 PIC X(3).
  18. 05 DATA-2 PIC X(5).
  19. FD KEKKA-FILE.
  20. 01 KEKKA-RECORD.
  21. 05 KEKKA-KEY PIC 9(5).
  22. 05 KEKKA-DATA PIC X(8).
  23.  
  24. SD SORT-FILE.
  25. 01 SORT-RECORD.
  26. 05 SORT-KEY PIC 9(5).
  27. 05 SORT-DATA PIC X(8).
  28. WORKING-STORAGE SECTION.
  29. 01 IN-FILE-STATUS PIC XX.
  30. 01 KEY-NUM PIC 9(5) VALUE 11111.
  31. 77 CST-END PIC X(4) VALUE "END ".
  32.  
  33. 01 WRK-FLAGS.
  34. 03 WRK-RELEASE-END PIC X(4).
  35. PROCEDURE DIVISION.
  36. SORT SORT-FILE
  37. ASCENDING KEY SORT-KEY
  38. INPUT PROCEDURE RELEASE-PROC
  39. OUTPUT PROCEDURE RETURN-PROC.
  40.  
  41. DISPLAY "プログラム終了"
  42.  
  43. STOP RUN.
  44.  
  45. *>*******ソート対象ファイルの読み込み*******
  46. RELEASE-PROC SECTION.
  47. OPEN INPUT TEST-FILE.
  48. PERFORM RELEASE-MAIN-PROC
  49. UNTIL WRK-RELEASE-END = CST-END.
  50. CLOSE TEST-FILE.
  51. EXIT.
  52.  
  53. *>********RELEASE文の処理*******
  54. RELEASE-MAIN-PROC SECTION.
  55. IF IN-FILE-STATUS = "00"
  56. THEN
  57. CONTINUE
  58. ELSE
  59. STOP RUN
  60. END-IF.
  61. READ TEST-FILE
  62. AT END
  63. MOVE "END" TO WRK-RELEASE-END
  64. NOT AT END
  65. MOVE TEST-RECORD TO SORT-RECORD
  66. *>SORT-KEYが11111の場合のみレコードを書き込む
  67. IF SORT-KEY = KEY-NUM
  68. RELEASE SORT-RECORD
  69. DISPLAY SORT-KEY","SORT-DATA
  70. END-IF
  71. END-READ
  72. EXIT.
  73.  
  74. *>********結果出力用ファイルの書き込み*******
  75. RETURN-PROC SECTION.
  76. *>RETURN文の処理を記述
  77. EXIT.

実行結果:

辞典・辞書-RELEASE-実行結果:

紹介したサンプルの基本処理は、使用例で紹介したサンプルと同じですが、RELEASE文の実行前にIF文で並列併合用ファイルに、書き込むレコードを判定しています。

このようにRELEASE文を使用すれば、ソート対象のレコードを指定することが可能となります。

実行結果のとおり並列併合用ファイルに書き込む段階では、まだソートはされていません。実際のソート処理は、RETURN文を使用したファイル入出力処理で行います。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門