COBOL言語の「RELEASE文」と整列用ファイルの関係とは? | 用語辞典
COBOL(コボル)言語の予約語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)
使用例:(2/2)
実行結果:
紹介したサンプルでは、SORT文でソートを行う前に実行するサブルーチンを指定しています。
サブルーチンのRELEASE-PROCで、ソート対象用ファイルのオープン及び、PERFORM文でサブルーチンのRELEASE-MAIN-PROCを呼び出し、ファイルのレコードが無くなるまでループしています。
RELEASE-MAIN-PROCでは、整列併合用ファイルにソート対象レコードを、そのままRELEASE文に書き込んでいるだけのシンプルな内容となります。
実際には、RELEASE文で整列併合用ファイルに書き込んだあとは、RETURN文を使用して整列併合用ファイルを読み込み、ソート結果を結果出力用のファイルに書き込む必要があります。
RETURN文については「COBOL言語の「RETURN文」と整列用ファイルの関係とは?|用語辞典」で詳しく解説しています。
RELEASE文のCOBOL(コボル)言語における基本事項やルールについて
- RELEASE文と出力レコードの間の空白は自由に設定できます。
- RELEASE文を実行すると、整列併合用ファイルにソート対象のレコードが書き込まれます。
- SORT文のINPUT PROCEDUREには、整列併合用ファイルへデータの引渡しを行うサブルーチンを指定します。
- SORT文のOUTPUT PROCEDUREには、ソート実施後に実行するサブルーチンを指定します。このサブルーチンでは、整列併合用ファイルを使用して処理を行うのが基本です。
COBOL(コボル)言語のRELEASE文を扱う上での注意点
- 整列併合用ファイルは、COBOLプログラムがソートで一時的に入出力を行うファイルのため、ファイルの実体はありません。
- SORT文のINPUT PROCEDUREとOUTPUT PROCEDUREは、必ずセットで記述する必要があります。どちらか片方のみ指定した場合は、以下のようにコンパイルエラーとなります。
RELEASE文を使ったCOBOL(コボル)プログラムの活用法
実際に指定したレコードのみをRELEASE文を使用して、並列併合用ファイルに書き込む場合はIF文などを使用して、ソート対象レコードを判定する必要があります。
以下にソートキーが11111の場合のみ、並列併合用ファイルに書き込む処理のサンプルを紹介します。
ソート対象ファイルは、行順編成のフラット形式で以下のようにレコードを記述しておきます。
test.txt-------------------
11111AAAaaaaa
22222BBBbbbbb
11111BBBbbbbb
44444DDDddddd
11111DDDddddd
11111CCCccccc
33333CCCccccc
----------------------------
- IDENTIFICATION DIVISION.
- PROGRAM-ID. RELEASE_SAMPLE02.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT TEST-FILE ASSIGN TO 'test.txt' *>ソート対象ファイル
- ORGANIZATION IS LINE SEQUENTIAL
- STATUS IS IN-FIlE-STATUS.
- SELECT KEKKA-FILE ASSIGN TO 'kekka.txt' *>結果出力用ファイル
- ORGANIZATION IS LINE SEQUENTIAL.
- SELECT SORT-FILE ASSIGN TO 'sort.wrk'. *>作業領域
- DATA DIVISION.
- FILE SECTION.
- FD TEST-FILE.
- 01 TEST-RECORD.
- 05 NO-CORD PIC 9(5).
- 05 DATA-1 PIC X(3).
- 05 DATA-2 PIC X(5).
- FD KEKKA-FILE.
- 01 KEKKA-RECORD.
- 05 KEKKA-KEY PIC 9(5).
- 05 KEKKA-DATA PIC X(8).
- SD SORT-FILE.
- 01 SORT-RECORD.
- 05 SORT-KEY PIC 9(5).
- 05 SORT-DATA PIC X(8).
- WORKING-STORAGE SECTION.
- 01 IN-FILE-STATUS PIC XX.
- 01 KEY-NUM PIC 9(5) VALUE 11111.
- 77 CST-END PIC X(4) VALUE "END ".
- 01 WRK-FLAGS.
- 03 WRK-RELEASE-END PIC X(4).
- PROCEDURE DIVISION.
- SORT SORT-FILE
- ASCENDING KEY SORT-KEY
- INPUT PROCEDURE RELEASE-PROC
- OUTPUT PROCEDURE RETURN-PROC.
- DISPLAY "プログラム終了"
- STOP RUN.
- *>*******ソート対象ファイルの読み込み*******
- RELEASE-PROC SECTION.
- OPEN INPUT TEST-FILE.
- PERFORM RELEASE-MAIN-PROC
- UNTIL WRK-RELEASE-END = CST-END.
- CLOSE TEST-FILE.
- EXIT.
- *>********RELEASE文の処理*******
- RELEASE-MAIN-PROC SECTION.
- IF IN-FILE-STATUS = "00"
- THEN
- CONTINUE
- ELSE
- STOP RUN
- END-IF.
- READ TEST-FILE
- AT END
- MOVE "END" TO WRK-RELEASE-END
- NOT AT END
- MOVE TEST-RECORD TO SORT-RECORD
- *>SORT-KEYが11111の場合のみレコードを書き込む
- IF SORT-KEY = KEY-NUM
- RELEASE SORT-RECORD
- DISPLAY SORT-KEY","SORT-DATA
- END-IF
- END-READ
- EXIT.
- *>********結果出力用ファイルの書き込み*******
- RETURN-PROC SECTION.
- *>RETURN文の処理を記述
- EXIT.
実行結果:
紹介したサンプルの基本処理は、使用例で紹介したサンプルと同じですが、RELEASE文の実行前にIF文で並列併合用ファイルに、書き込むレコードを判定しています。
このようにRELEASE文を使用すれば、ソート対象のレコードを指定することが可能となります。
実行結果のとおり並列併合用ファイルに書き込む段階では、まだソートはされていません。実際のソート処理は、RETURN文を使用したファイル入出力処理で行います。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典