ILE COBOL 解説書

REDEFINES 文節についての考慮事項

ある区域内のデータ項目を、その長さを変えずに再定義できます。 たとえば、次のとおりです。

05  NAME-2.
  10  SALARY                  PICTURE XXX.
  10  SO-SEC-NO               PICTURE X(9).
  10  MONTH                   PICTURE XX.
05  NAME-1 REDEFINES NAME-2.
  10  WAGE                    PICTURE XXX.
  10  EMP-NO                  PICTURE X(9).
  10  YEAR                    PICTURE XX.

データ項目の長さおよびタイプを再定義される区域内で変更することもできます。たとえば、次のとおりです。

05  NAME-2.
  10  SALARY                  PICTURE XXX.
  10  SO-SEC-NO               PICTURE X(9).
  10  MONTH                   PICTURE XX.
05  NAME-1 REDEFINES NAME-2.
  10  WAGE                    PICTURE 999V999.
  10  EMP-NO                  PICTURE X(6).
  10  YEAR                    PICTURE XX.

ある区域を再定義しても、その区域のすべての記述は常に有効のままです。 つまり、再定義によってどのデータも、消去されたりそれ以前の記述を置き換えたりしません。 したがって、B REDEFINES C と指定した場合、2 つのプロシージャー・ステートメント MOVE X TO B と MOVE Y TO C はどちらも、プログラム内の任意のポイントで実行できます。

最初のステートメントの場合、B と記述された区域は X の値と形式をとります。 2 番目のステートメント場合、同じ物理域 (今度は C と記述されます) は Y の値と形式をとります。 2 番目のステートメントが最初のステートメントの直後に実行されると、1 つの記憶域で X の値は Y の値に置き換わります。

再定義するデータ項目の USAGE は、再定義される項目の USAGE と同じである必要はありません。 ただし、同じでないときは、既存のデータに何の変化も起こりません。 たとえば、次のとおりです。

05  B                      PICTURE  99 USAGE DISPLAY VALUE 8.
05  C REDEFINES B          PICTURE S99 USAGE COMPUTATIONAL-4.
05  A                      PICTURE S99 USAGE COMPUTATIONAL-4.

DISPLAY 値 8 のビット構成は、次のとおりです。

1111 0000 1111 1000.

B を再定義しても、記憶域内のデータのビット構成は変わりません。 したがって、次の 2 つのステートメントを実行した場合、異なる結果になります。

ADD B TO A
ADD C TO A

前者のステートメントでは、値 8 が A に加算されます (B が USAGE DISPLAY をもっているため)。 後者のステートメントでは、記憶域内のビット構成 (2 桁の 10 進数に切り捨てられる) は 2 進数の -48 になり、-48 という値が A に加算されます (C が USAGE COMPUTATIONAL-4 をもっているため)。

前記の例は、再定義を適切に使用しないと、予期しないまたは正しくない結果となることを示します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]