REDEFINE

REDEFINE

operand1 (

nX )
operand2

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連機能グループ:レポーティングモードのステートメント


関数

REDEFINE ステートメントは、フィールドを再定義するために使用します。再定義により、1 つ以上のユーザー定義変数にできます。

1 つの REDEFINE ステートメントで複数のフィールドを再定義できます。

制限事項

REDEFINE ステートメントはレポーティングモードでのみ有効です。ストラクチャードモードでフィールドを再定義するには、DEFINE DATA ステートメントの REDEFINE 節を使用します。

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1   S A G   A U N P I F B D T L C     ×
operand2   S A G   A   N P I F B D T L C    

構文要素の説明:

構文要素 説明
REDEFINE operand1 operand2
再定義の方法

operand1 のバイト位置をフォーマットに関係なく左から右に再定義します。

operand2 のフォーマットには、operand1 と異なるフォーマットを指定できます。ただし、operand2 のバイト位置のデータは、出力レポートでの予期しない結果を避けるために、operand2 のフォーマット指定と一致する必要があります。例えば、英数字フィールドが数字フィールドに再定義されて、フォーマット指定に従った数字データが入っていない場合、そのフィールドが使用されるときに異常終了することがあります。

再定義したフィールドの再定義

REDEFINE ステートメントで定義したフィールドを、続いて別の REDEFINE ステートメントで再定義することもできます。

nX
フィラー指定

nX 指定は、再定義されるフィールド/変数内のフィラーバイトを示します。フィールド末尾の nX 指定は任意です。

例 1

ユーザー定義変数 #A(フォーマット/長さ A10)の値は 123ABCDEFG です。

REDEFINE #A (#A1(N3) #A2(A7))

#A1 の値は 123 です。#A2 の値は ABCDEFG です。

例 2

ユーザー定義変数 #B(フォーマット/長さ A10)の値(16 進形式)は 12345CC1C2C3C4C5C6C7 です。

REDEFINE #B (#B1(P4) #B2(A7))

#B1 の値は 12345C(16 進形式)です。

#B2 の値は C1C2C3C4C5C6C7(16 進形式)です。

REDEFINE #B (#BB1(B2)8X)) or REDEFINE #B(#BB1(B2))

#BB1 の値は 1234(16 進形式)です。

注意:
パックデータ(P フォーマット)では必要な桁数を指定します。次の式でパック形式のデータのバイト数を求めることができます。

Number of bytes = (number of decimal positions + 1) / 2、端数はバイト単位で切り上げます。

例 3

COMPUTE #V (N8.2) = #Y (N10) = ...
REDEFINE #V (3X  #A(N3)  2X  #P (N2))  #Y (#B(N3)  7X)

Example

例 4

この例では、YYYYMMDD 形式のシステム変数 *DATN の値を再定義し、日/月/年 の順で 3 フィールドに分割して結果を出力しています。

MOVE *DATN TO #DATINT (N8)
REDEFINE #DATINT (#YEAR (N4) #MONTH (N2) #DAY (N2))
DISPLAY NOTITLE #DATINT #DAY #MONTH #YEAR
END

出力:

 #DATINT  #DAY #MONTH #YEAR
--------- ---- ------ -----
                           
 20140326  26    3     2014