フィールドの値の変更

割り当て演算子 (=) を指定した 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'