COBOL言語の「REDEFINES句」とは?使い方を確認しよう! | 用語辞典

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

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

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

COBOLでは、データ項目を別のレイアウトに変更して再利用することを「再定義」といいます。

REDEFINES句でデータ項目を再定義して利用すると、1つの項目でさまざまなレイアウトに使用することが可能なため、繰り返し項目を使用する場合に便利です。

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

書き方:

レベル番号 [再定義データ項目 または FILLER] REDEFINES [再定義対象データ項目].

レベル番号は、再定義対象データ項目と同じレベルを指定する必要があります。再定義データ項目は、プログラム内で再定義名を使用しない場合は、FILLERを指定します。

以下にREDEFINES句を使用して、データ項目を再定義して使用する簡単なプログラムを紹介します。

辞典・辞書-REDEFINES-プログラム

実行結果:

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

サンプルでは年月日をまとめて取得する項目WORK-DATEを、REDEFINES句を使用して項目WORK-DATE-Rに再定義して、年・月・日をそれぞれの単位で扱えるようにしています。

なお、日付の書式を扱う場合は、英数字編集形式のデータ項目を再定義することもできます。

03 WORK-DATE     PIC XXXX/XX/XX.

03 WORK-DATE     PIC XXXX/XX/XX.

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

  1. 再定義データ項目、REDEFINES、再定義対象データ項目の各要素間の改行有無は自由に設定できます。
  2. 再定義データ項目と再定義対象データ項目は、同じレベル番号を指定します。
  3. プログラム内で再定義データ項目を使用しない場合はFILLERを指定します。
  4. REDEFINES句で指定できるレベル番号は02~49の範囲内です。
  5. 集団項目に従属するデータ項目は、再定義対象データ項目のサイズを上回らない範囲で自由に設定することができます。

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

  1. ファイル節の01レベルのデータ項目の場合、REDEFINES句の指定はできません。
  2. レベル番号66、88はREDEFINES句の指定はできません。
  3. 再定義するデータ項目に、VALUE句を記述してはいけません。
  4. 再定義データ項目のサイズは、再定義対象データ項目の集団項目のサイズより小さくしても構いませんが、集団項目を上回るサイズを指定することはできません。

以下のように従属する項目のサイズが、集団項目のサイズを上回るとコンパイルエラーが発生します。

03 WORK-DATE    PIC 9(08).

03 WORK-DATE-R   REDEFINES WORK-DATE.

05 WORK-YEAR    PIC 9(04).

05 WORK-MONTH   PIC 9(04).

05 WORK-DAY     PIC 9(08).

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

集団項目のサイズの範囲内なら、従属するデータ項目の範囲を自由に調整することは可能です。

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

REDEFINES句は、再定義する集団項目に従属している項目についても、項目名やサイズや型などのレイアウトを指定することができます。

以下にREDEFINES句を使用して、従属する項目を再定義して利用する簡単なサンプルを紹介します。

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. REDEFINES_SAMPLE02.
  3.  
  4. ENVIRONMENT DIVISION.
  5. CONFIGURATION SECTION.
  6. DATA DIVISION.
  7. WORKING-STORAGE SECTION.
  8. 01 FRUITS.
  9. 03 FRUITS-NAME.
  10. 05 FRUITS-NAME-1 PIC X(9).
  11. 05 FRUITS-NAME-2 PIC X(9).
  12. 05 FRUITS-NAME-3 PIC X(9).
  13. *>REDEFINES句を指定して項目を再定義する
  14. 03 FRUITS-PRICE REDEFINES FRUITS-NAME.
  15. 05 FRUITS-PRICE-1 PIC 9(3).
  16. 05 FRUITS-PRICE-2 PIC 9(3).
  17. 05 FRUITS-PRICE-3 PIC 9(3).
  18.  
  19. PROCEDURE DIVISION.
  20. MAIN SECTION.
  21.  
  22. *>商品名を設定する
  23. MOVE "APPLE" TO FRUITS-NAME-1.
  24. MOVE "BANANA" TO FRUITS-NAME-2.
  25. MOVE "MELON" TO FRUITS-NAME-3.
  26.  
  27. *>結果を出力する
  28. DISPLAY "商品名:".
  29. DISPLAY "FRUITS-NAME-1:"FRUITS-NAME-1.
  30. DISPLAY "FRUITS-NAME-2:"FRUITS-NAME-2.
  31. DISPLAY "FRUITS-NAME-3:"FRUITS-NAME-3.
  32.  
  33. *>REDEFINES句で再定義した項目で値段を設定する
  34. MOVE 100 TO FRUITS-PRICE-1.
  35. MOVE 150 TO FRUITS-PRICE-2.
  36. MOVE 500 TO FRUITS-PRICE-3.
  37.  
  38. *>結果を出力する
  39. DISPLAY "値段:".
  40. DISPLAY "FRUITS-PRICE-1:"FRUITS-PRICE-1.
  41. DISPLAY "FRUITS-PRICE-2:"FRUITS-PRICE-2.
  42. DISPLAY "FRUITS-PRICE-3:"FRUITS-PRICE-3.
  43.  
  44. STOP RUN.

実行結果:

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

サンプルでは、商品名を設定する集団項目FRUITS-NAMEと、従属する項目を定義し、REDEFINES句を使用して商品の値段を設定する項目を、FRUITS-PRICEの名称で再定義しています。再定義したFRUITS-PRICEでは従属する項目の型やサイズも変更しています。

実行結果のとおり、商品名と再定義した値段の項目が、それぞれ設定できていることがわかります。

なお、従属する項目については、集団項目のサイズを上回らない範囲で、データ項目を新たに追加して使用することも可能です。

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

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

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

COBOL入門のカテゴリー

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