バージョン 4.2.5
 —  ステートメント  —

REDEFINE

REDEFINE

operand1 (

nX )
operand2

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

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


機能

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

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

Top of page

制限事項

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

Top of page

構文説明

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

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
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 operand1operand2
再定義の方法

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

operand2 のフォーマットには、operand1 と異なるフォーマットを指定できます。 REDEFINE ステートメントで指定するバイトの位置は、元のフィールド内のデータと合っている必要があります。 英数字フィールドが数字フィールドに再定義されて、フォーマット指定に従った数字データが入っていない場合、そのフィールドが使用されるときに異常終了することがあります。

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

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

nX
フィラー指定

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

Top of page

例 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 フォーマット)では必要な桁数を指定します。 次の式でパック形式のデータのバイト数を求めることができます。

バイト数 = (桁数 + 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    
  --------- ---- ------ -----
  
   19950108   8    1     1995

Top of page