コンテンツフレーム起動

索引を使用したテーブル行の変更 文書を SAP ライブラリストラクチャに組み込む

MODIFY 命令で、索引を使用してテーブル内の行を変更することができます。標準テーブルを変更する場合に使用できる WRITE TO 命令の特殊なバリアントもあります。

MODIFY による単一の行の変更

索引を使用して単一の行を変更するには、以下の命令を使用します。

MODIFY <itab> FROM <wa> [INDEX <idx>] [TRANSPORTING <f1> <f2> ... ].

<itab> の既存の行が FROM オプションで指定した作業領域<wa> に置き換えられます。作業領域は、内部テーブルの行データ型に変換できなければなりません。

INDEX オプションを使用すると、作業領域の内容で索引 <idx> を持つ行の内容が上書きされます。操作が正常に実行されると、SY-SUBRC 0 に設定されます。内部テーブルの行数が <idx> より少ない場合は、SY-SUBRC 4 に設定されます。

INDEX オプションを使用しない場合は、上記の命令は LOOP 内でのみ使用することができます。この場合は、現在のループ行を変更します (<idx> は暗黙的に SY-TABIX に設定されます)

ソートテーブルの行を変更する場合は、キー項目の内容は変更できず、キー項目の内容を別の値に置き換えようとすると実行時エラーが発生することに注意してください。ただし、同じ値を割り当てることはできます。

TRANSPORTING オプションを使用すると、変更する項目を一覧で明示的に指定することができます。テーブルエントリの変更も参照してください。ソートテーブルを変更する場合は、キー以外の項目のみを指定してください。 

WRITE TO を使用した行の変更

以下の命令を使用して、標準テーブルの行を変更することができます。

WRITE <f> TO <itab> INDEX <idx>.

この WRITE TO 命令のバリアントでは、項目 <f> の内容が C 型に変換され、変換された文字列が索引<idx> を持つ行に転送されます。操作が正常に実行されると、SY-SUBRC 0 に設定されます。内部テーブルの行数が <idx> より少ない場合は、SY-SUBRC 4 に設定されます。

<f> のデータ型は、文字項目に変換できなければなりません。変換できない場合は、構文エラーまたは実行時エラーが発生します。行は、実際の行データ型に関係なく、常に文字列として解釈されます。通常の WRITE TO 命令の場合と同様の方法で、コンポーネントを処理することができます。この命令は、正確な位置がすでにわかっている単一の文字を変更する場合に、構造化された行データ型に対してのみ使用してください。また、構造が単一の文字項目で構成されている内部テーブルを使用することもできます。この種のテーブルは、通常は動的プログラミングで使用されます。

 例

DATA: BEGIN OF LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE TABLE OF LINE.

DO 3 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.

ENDDO.

LOOP AT ITAB INTO LINE.
   IF SY-TABIX = 2.
     LINE-COL1 = SY-TABIX * 10.
     LINE-COL2 = ( SY-TABIX * 10 ) ** 2.
     MODIFY ITAB FROM LINE.

   ENDIF.
ENDLOOP.

LOOP AT ITAB INTO LINE.
   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.

出力は以下のようになります。

        1         1          1
         2        20        400
         3         3          9

ここでは、ソートテーブル ITAB が作成され 3 行が書き込まれます。2 番目の行が作業領域 LINE の内容に置き換えられます。

 例

DATA NAME(4) VALUE 'COL2'.

DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY COL1.

DO 4 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.

ENDDO.

LINE-COL2 = 222.
MODIFY ITAB FROM LINE INDEX 2 TRANSPORTING (NAME).

LINE-COL1 = 3.
LINE-COL2 = 333.
MODIFY ITAB FROM LINE INDEX 3.

LOOP AT ITAB INTO LINE.
   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.

出力は以下のようになります。

        1         1          1
         2         2        222
         3         3        333
         4         4         16

この例では、ソートテーブルに 4 行が書き込まれます。2 番目と 3 番目の行のコンポーネント COL2 が変更されます。3 番目の行が変更されて LINE-COL1 の値が 3 でなくなると、ソートテーブルのキー項目は変更できないので、実行時エラーが発生します。

 例

DATA TEXT(72).

DATA CODE LIKE TABLE OF TEXT.

TEXT = 'This is the first line.'.

APPEND TEXT TO CODE.

TEXT = 'This is the second line.It is ugly.'.

APPEND TEXT TO CODE.

TEXT = 'This is the third and final line.'.

APPEND TEXT TO CODE.

WRITE 'nice.'TO CODE+31 INDEX 2.

LOOP AT CODE INTO TEXT.

   WRITE / TEXT.

ENDLOOP.

出力は以下のようになります。

This is the first line.
This is the second line.It is nice.
This is the third and final line.

ここでは、72 文字の長さの基本データ型 C を持つ内部テーブル CODE が定義されます。テーブルに 3 行が書き込まれたあと、WRITE TO 命令を使用して 2 番目の行が変更されます。単語 "ugly" が単語 "nice" に置き換えられます。

 

 

 

 

 

コンテンツフレーム終了