フィールドの値の変更
割り当て演算子 (=) を指定した EVAL コマンドを使用してフィールドの値を変更する ことができます。
EVAL コマンドで使用されるフィールドの有効範囲は、QUAL コマンドを使用し て定義します。 しかし、ILE RPG モジュールに含まれるフィールドは すべてがグローバルな有効範囲なので、それらを特別に定義する必要はありません。
フィールドの値を変更するためには、デバッグ・コマンド行に
EVAL field-name = value
と入力します。field-name は変更したい変数の名前であり、
value は変数 field-name に割り当てたい ID、リテラル、または定数値です。
例えば
EVAL COUNTER=3
によって、COUNTER の値は 3 に変わり、また「モジュール・ソースの表示」画面のメッセージ行に
COUNTER=3 = 3
と表示されます。EVAL デバッグ・コマンドを使用して、フィールドに数値、英字、および 英数字データを割り当ててください。 割り当て式で %SUBSTR 組み込み関数を使用することもできます。
文字フィールドに値を割り当てる時には、次の規則が適用されます。
- 割り当て元の式の長さが割り当て先の式の長さより短い場合には、割り当て先の式 でデータが左寄せにされ、残りの桁にブランクが埋め込まれます。
- 割り当て元の式の長さが割り当て先の式の長さより長い場合には、割り当て先の式 でデータが左寄せにされ、割り当て先の式の長さまでに切り捨てられます。
注: 図形フィールドには次のものを割り当てることができます。
- 別の図形フィールド
- G'oK1K2i ' の形式の図形リテラル
- X'16 進数字' 形式の 16 進リテラル
UCS-2 フィールドの変更は、16 進定数を使用して行います。例えば 、%UCS2('AB') = U'00410042' であるため、デバッガー内で UCS-2 フィールドを 'AB' という UCS-2 形式に設定するためには、EVAL ucs2 = X'00410042' を使用します。
可変長フィールドは、例えば、EVAL varfldname = 'abc' を使用して割り当てることができます。これによって、フィールドのデータ部分は 'abc' に、長さ部分は 3 に設定されます。
フィールドにリテラルを割り当てる時には、以下の通常の RPG 規則が適用されます。
- 文字リテラルは引用符で囲まなければなりません。
- 図形リテラルは G'oDDDDi' として指定し、 ここで o はシフトアウト、i はシフトインを表します。
- 16 進リテラルは引用符で囲み、前に 'x' がなければなりません。
- 数値リテラルは引用符で囲んではなりません。
注: EVAL デバッグ・コマンドを使用して形象定数をフィールドに
割り当てることはできません。 形象定数は EVAL デバッグ・コマンドではサポートされていません。
変数の null 標識を変更するには、最外部の名前を _QRNU_NULL_name で置換して、変数自身にアクセスするときと同じ EVAL 式をデバッガーで使用します。
EVAL FLD1 = 3
EVAL _QRNU_NULL_FLD1 = '0'
EVAL SUBF2 = 5
EVAL _QRNU_NULL_SUBF2 = '0'
EVAL ARR(3) = 0
EVAL _QRNU_NULL_ARR(3) = '1'
EVAL DS3.INFO(2).SUB4 = 'some value'
EVAL _QRNU_NULL_DS3.INFO(2).SUB4 = '0'
ヌル可能フィールドのデバッグの詳細については、ヌル可能フィールドの表示を参照してください。図 1 は、図 1 のソースに基づいてフィールドの値を 変更するいくつかの例を示します。 ソース・デバッガーのオンライン・ヘルプには追加の例も提供されています。
図 1. DBGEX に基づくフィールドの値の変更の例
** ターゲットの長さ = ソースの長さ **
> EVAL String='123456' (6 characters)
STRING='123456' = '123456'
> EVAL ExportFld (6 characters)
EXPORTFLD = 'export'
> EVAL String=ExportFld
STRING=EXPORTFLD = 'export'
** ターゲットの長さ < ソースの長さ **
> EVAL String (6 characters)
STRING = 'ABCDEF'
> EVAL LastName (10 characters)
LASTNAME='Williamson' = 'Williamson'
> EVAL String=LastName
STRING=LASTNAME = 'Willia'
** ターゲットの長さ > ソースの長さ **
> EVAL String (6 characters)
STRING = '123456'
> EVAL TableA (3 characters)
TABLEA = 'aaa'
> EVAL String=TableA
STRING=TABLEA = 'aaa '
** %SUBSTR の使用 **
> EVAL BigDate
BIGDATE = '1994-10-23'
> EVAL String=%SUBSTR(BigDate 1 4)
STRING=%SUBSTR(BIGDATE 1 4) = '1994 '
** サブストリング・ターゲットの長さ > サブストリング・ソースの長さ **
> EVAL string = '123456'
STRING = '123456' = '123456'
> EVAL LastName='Williamson'
LASTNAME='Williamson' = 'Williamson'
> EVAL String = %SUBSTR(Lastname 1 8)
STRING = %SUBSTR(LASTNAME 1 8) = 'Willia'
** サブストリング・ターゲットの長さ < サブストリング・ソースの長さ **
> EVAL TableA
TABLEA = 'aaa'
> EVAL String
STRING = '123456'
> EVAL String=%SUBSTR(TableA 1 4)
サブストリングがストリングの終わりを超える。 ** エラー **
> EVAL String
STRING = '123456'