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

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

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

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

COBOL(コボル)におけるRETURN文は、ファイルの内容をソートするときに使用する、整列併合用ファイル(ソート処理用ファイル)の内容を読み込むときに使用する命令文です。

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

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

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

また、RETURN文はRELEASE文とセットで使用されるため、(RETURN文のみの単独使用は不可)RELEASE文の基本的な理解も必要です。

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

RETURN文は、SORT文でソート実行時に使用する作業領域である並列併合用ファイルに、ソートした対象のレコードをRELEASE文で書き込んだあとに、並列併合用ファイルを読み込むために使用します。

並列併合用ファイルは、ソート実行時のみ使用される一時ファイルのため、通常のファイルのようにREAD文で読み込むことはできません。

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

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

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

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

  INPUT PROCEDURE [サブルーチン名]

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

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

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

RETURN 並列併合用ファイル名

 AT END

   読み込み終了時の処理

 NOT AT END

   読み込み実行時の処理

END-RETURN.

RETURN文は、通常のファイル読み込み時に使用するREAD文と同様の書式となります。

並列併合用ファイルのオープン処理は、SORT文で自動的に実施されます。

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

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

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

11111AAAaaaaa

22222BBBbbbbb

11111BBBbbbbb

44444DDDddddd

11111DDDddddd

11111CCCccccc

33333CCCccccc

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

使用例:(1/2)

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

使用例:(2/2)

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

実行結果:

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

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

サブルーチンのRELEASE-PROCとRELEASE-MAIN-PROCでソート用ファイルのオープン及びRELEASE文で並列併合用ファイルの書き込み処理を行っています。

続けてOUTPUTでRETURN文の処理をするために、サブルーチンRETURN-PROCを呼び出し、書き込みファイルのオープンとPERFORM文でサブルーチンRETURN-MAIN-PROCを呼び出しています。

RETURN-MAIN-PROCではRETURN文を使用して、並列併合用ファイルを読み込み、ソート結果を結果出力用ファイルに書き込んでいます。

実行結果のとおり、並列併合用ファイルをRETURN文で読み込んだときは、SORT文によるソート処理が実行されているため、昇順でソートされていることがわかります。

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

  1. RETURN文と出力レコードの間の空白は自由に設定できます。
  2. RETURN文はAT END(読み込み終了時の処理)、NOT AT END(読み込み時の処理)の処理は必要に応じて記述します。どちらか片方、または両方省略してもかまいません。
  3. RETURN文を実行すると、整列併合用ファイルに書き込まれたレコードが読み込まれます。
  4. SORT文のINPUT PROCEDUREには、整列併合用ファイルへデータの引渡しを行うサブルーチンを指定します。基本的にはRELEASE文のメイン処理を記述します。
  5. SORT文のOUTPUT PROCEDUREには、ソート実施後に実行するサブルーチンを指定します。このサブルーチンでは、整列併合用ファイルを使用してのRETURN文の処理を行うのが基本です。

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

  1. 整列併合用ファイルは、COBOLプログラムがソートで一時的に入出力を行うファイルのため、ファイルの実体はありません。
  2. RETURN文では必ずSD句で指定した並列併合用ファイルを指定しなければいけません。誤って通常のファイルを指定した場合は、以下のようにコンパイルエラーとなります。

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

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

以下にソートキーが11111の場合のみ、RELEASE文で並列併合用ファイルに書き込んでSORT文を実行し、RETRUN文でSORT文実行時に指定されたソートキーのみをソートする、簡単なサンプルを紹介します。

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. RETURN_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-KEY1 PIC 9(5).
  22. 05 KEKKA-KEY2 PIC X(3).
  23. 05 KEKKA-DATA PIC X(5).
  24.  
  25. SD SORT-FILE.
  26. 01 SORT-RECORD.
  27. 05 SORT-KEY1 PIC 9(5).
  28. 05 SORT-KEY2 PIC X(3).
  29. 05 SORT-DATA PIC X(5).
  30. WORKING-STORAGE SECTION.
  31. 01 IN-FILE-STATUS PIC XX.
  32. 01 KEY-NUM PIC 9(5) VALUE 11111.
  33. 77 CST-END PIC X(4) VALUE "END ".
  34.  
  35. 01 WRK-FLAGS.
  36. 03 WRK-RELEASE-END PIC X(4).
  37. 03 WRK-RETURN-END PIC X(4).
  38.  
  39. PROCEDURE DIVISION.
  40. SORT SORT-FILE
  41. ASCENDING KEY SORT-KEY2
  42. INPUT PROCEDURE RELEASE-PROC
  43. OUTPUT PROCEDURE RETURN-PROC.
  44.  
  45. DISPLAY "プログラム終了"
  46.  
  47. STOP RUN.
  48.  
  49. *>*******ソート対象ファイルの読み込み*******
  50. RELEASE-PROC SECTION.
  51. OPEN INPUT TEST-FILE.
  52. PERFORM RELEASE-MAIN-PROC
  53. UNTIL WRK-RELEASE-END = CST-END.
  54. CLOSE TEST-FILE.
  55. EXIT.
  56.  
  57. *>********RELEASE文の処理*******
  58. RELEASE-MAIN-PROC SECTION.
  59. IF IN-FILE-STATUS = "00"
  60. THEN
  61. CONTINUE
  62. ELSE
  63. STOP RUN
  64. END-IF.
  65. READ TEST-FILE
  66. AT END
  67. MOVE "END" TO WRK-RELEASE-END
  68. NOT AT END
  69. MOVE TEST-RECORD TO SORT-RECORD
  70. *>SORT-KEY1が11111の場合のみレコードを書き込む
  71. IF SORT-KEY1 = KEY-NUM
  72. RELEASE SORT-RECORD
  73. DISPLAY "RELEASE文: "SORT-KEY1","SORT-KEY2","SORT-DATA
  74. END-IF
  75. END-READ
  76. EXIT.
  77.  
  78. *>*******結果出力用ファイルの読み込み*******
  79. RETURN-PROC SECTION.
  80. OPEN OUTPUT KEKKA-FILE.
  81. PERFORM RETURN-MAIN-PROC
  82. UNTIL WRK-RETURN-END = CST-END.
  83. CLOSE KEKKA-FILE.
  84. EXIT.
  85.  
  86. *>********RETURN文の処理*******
  87. RETURN-MAIN-PROC SECTION.
  88. RETURN SORT-FILE
  89. AT END
  90. MOVE "END" TO WRK-RETURN-END
  91. NOT AT END
  92. DISPLAY "RETURN文: "SORT-KEY1","SORT-KEY2","SORT-DATA
  93. MOVE SORT-KEY1 TO KEKKA-KEY1
  94. MOVE SORT-KEY2 TO KEKKA-KEY2
  95. MOVE SORT-DATA TO KEKKA-DATA
  96. WRITE KEKKA-RECORD
  97. END-RETURN.
  98. EXIT.

実行結果:

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

紹介したサンプルの基本処理は、使用例で紹介したサンプルと基本的に同じですが、SORT文実行時のキーをSORT-KEY2のアルファベットの文字列で指定しています。

また、RELEASE文の実行時は、SORT-KEY1の値が数値の11111だったら、並列併合用ファイルに書き込むようにしています。

RELEASE文実行後はSORT文によるソート処理が行われ、RETURN文で並列併合用ファイルのレコードを1つずつ読み込んで、結果出力用ファイルに書き込んでいます。

実行結果のとおり、RETRUN文実行時の並列併合用ファイルには、SORT-KEY1の11111のみ書き込まれ、SORT-KEY2で指定したアルファベット3文字が昇順でソートされています。

結果出力用ファイルのkekka.txtには、RETURN文実行時の内容がそのままWRITE文で書き込まれています。

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

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

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

COBOL入門のカテゴリー

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