COBOL言語の「RECORD句」ってなに?注意点など説明します | 用語辞典

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

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

COBOL(コボル)言語のRECORD句とは?

COBOL(コボル)には、様々な予約語が用意されていますが、レコード長が可変のファイルを扱う場合は、レコードのサイズ、または可変長レコードのサイズを指定するためにRECORD句を使用します。

本記事では、COBOLにおけるRECORD句について基本的な使い方やルール、注意点などをご紹介します。

書き方:

FD [ファイル名]

 RECORD IS VARYING IN SIZE

 FROM [最小長] TO [最大長] CHARACTERS

 DEPENDING ON [レコード長項目].

 レコード記述項.

RECORD句は、FD句(ファイル記述項)の中で指定します。

以下にRECORD句を使用して、可変長レコードのファイルを作成する簡単なプログラムを紹介します。

辞典・辞書-RECORD-書き方

実行結果:

辞典・辞書-RECORD-実行結果

プログラムを実行して作成されたファイル"test.txt"を確認すると、実行結果のように出力されています。

使用したサンプルでは、RECORD句で最小長5、最大長10の可変長のレコードを指定しています。

DEPENDINGで指定したレコード長項目は、ファイルにレコードを書き込む前にサイズ6で指定しています。

なお、ファイルに書き込むレコードのデータ項目は、RECORD句で指定した最小長、最大長の範囲内のサイズを指定しなければいけません。

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

  1. RECORD、VARYINGなどの空白や改行有無は自由に設定できます。
  2. 最小長、最大長は1以上の最少レコード長を指定し、最少長より大きい値の最大長を数値で指定する必要があります。
  3. レコード長項目は、ファイルの読み込みや書き込みを行うためのレコードのデータ項目を指定します。
  4. レコード長項目は、WORKING-STORAGE SECTIONに数値形式で定義する必要があります。
  5. FD句の中で指定する、ファイルに書き込むためのレコード記述項目は、RECORD句で指定した最小長、最大長の範囲内で指定する必要があります。
  6. RECORD句の「FROM [最小長] TO [最大長] CHARACTERS」は、省略可能です。
  7. FD句でRECORD句を指定しない場合は、レコード記述項目のサイズによって、書き込むレコードのサイズが決まります。
  8. ファイルに書き込むレコードのサイズは、DEPENDINGで指定したデータ長項目に設定します。

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

  1. 最大長は、最小長以下の値を指定することはできません。
  2. レコード記述項目のサイズは、RECORD句の最小長、最大長の範囲で設定しなければいけません。

例えば以下のように最小長5、最大長10で設定した場合は、その範囲外のレコード記述項目を指定すると、コンパイルエラーが発生します。

RECORD VARYING IN SIZE

FROM 5 TO 10 CHARACTERS

DEPENDING ON TEST-NUM.

01 OUT-FILE-REC PIC X(11).

辞典・辞書-RECORD-注意点

レコードのサイズが大きい旨のコンパイルエラーが発生します。

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

RECORD句を使用すれば、1つのレコード記述項目で何回も自由に書き込むサイズを指定して、可変長のレコードをファイルに書き込むことが可能です。

以下にレコード長項目を複数回指定して、レコードをファイルに書き込む簡単なサンプルを紹介します。

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. RECORD_SAMPLE02.
  3.  
  4. ENVIRONMENT DIVISION.
  5. INPUT-OUTPUT SECTION.
  6. FILE-CONTROL.
  7. *> ファイル名を設定する
  8. SELECT TEST-FILE ASSIGN TO 'test.txt'
  9. ORGANIZATION IS LINE SEQUENTIAL.
  10.  
  11. DATA DIVISION.
  12. FILE SECTION.
  13. *> 書きこむファイルを指定する
  14. FD TEST-FILE
  15. *> 可変長ファイルのレコード長を指定する
  16. RECORD VARYING IN SIZE
  17. FROM 5 TO 10 CHARACTERS
  18. DEPENDING ON TEST-NUM.
  19.  
  20. 01 OUT-FILE-REC PIC X(10).
  21.  
  22. WORKING-STORAGE SECTION.
  23. 01 TEST-RECORD-AREA.
  24. 03 TEST-NUM PIC 9(1).
  25. 03 TEST-STR PIC X(10).
  26.  
  27. PROCEDURE DIVISION.
  28. MAIN SECTION.
  29.  
  30. *> ファイルをオープンする
  31. OPEN OUTPUT TEST-FILE.
  32. *> 書き込む文字列を指定
  33. MOVE "ABCDE01234" TO TEST-STR.
  34.  
  35. *> 9byte
  36. COMPUTE TEST-NUM = 9.
  37. MOVE TEST-STR TO OUT-FILE-REC.
  38. WRITE OUT-FILE-REC.
  39.  
  40. *> 8byte
  41. COMPUTE TEST-NUM = 8.
  42. WRITE OUT-FILE-REC.
  43.  
  44. *> 7byte
  45. COMPUTE TEST-NUM = 7.
  46. WRITE OUT-FILE-REC.
  47.  
  48. *> 6byte
  49. COMPUTE TEST-NUM = 6.
  50. WRITE OUT-FILE-REC.
  51.  
  52. *> 5byte
  53. COMPUTE TEST-NUM = 5.
  54. WRITE OUT-FILE-REC.
  55.  
  56. *> 4byte
  57. COMPUTE TEST-NUM = 4.
  58. WRITE OUT-FILE-REC.
  59.  
  60. *> 3byte
  61. COMPUTE TEST-NUM = 3.
  62. WRITE OUT-FILE-REC.
  63.  
  64. *> 2byte
  65. COMPUTE TEST-NUM = 2.
  66. WRITE OUT-FILE-REC.
  67.  
  68. *> 1byte
  69. COMPUTE TEST-NUM = 1.
  70. WRITE OUT-FILE-REC.
  71.  
  72. *> ファイルクローズ
  73. CLOSE TEST-FILE.
  74.  
  75. STOP RUN.

実行結果:

辞典・辞書-RECORD-実行結果

サンプルでは、DEPENDING で指定したレコード長項目TEST-NUMの値を複数指定し、ファイルにレコードを書き込んでいます。

実行結果のとおり、指定したレコード長でレコードが書き込まれているのがわかります。

このようにRECORD句を指定すれば、書き込むレコードのサイズを1つのレコード記述項目で何度も変更することが可能です。

また、サンプルで示したようにDEPENDINGで指定したレコード長項目は、レコード記述項目のように最小値から最大値の範囲外のサイズ1~4を指定することも可能です。

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

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

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

COBOL入門のカテゴリー

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