!--a11y-->

構造化データオブジェクト <s> に対して、
ASSIGN COMPONENT <comp> OF STRUCTURE <s> TO <FS>.
を使って、コンポーネントの 1 つ <comp> をフィールドシンボル <FS> に割り当てることができます。コンポーネント <comp> は、リテラルまたは変数として指定することができます。<comp> のデータ型が C の場合、または構造がコンポーネントとして内部テーブルを持たない場合は、コンポーネントの名前を指定します。<comp> が別の基本データ型の場合は、データ型 I に変換され、コンポーネントの数を指定します。割当が正常に行われると、SY-SUBRC は 0 に設定されます。正常に行われなかった場合は、4 に設定されます。
この命令は、構造化データオブジェクトのコンポーネントを動的にアドレスする場合に特に重要です。ジェネリックデータ型またはキャストを使ってデータオブジェクトをフィールドシンボルに割り当てる場合、データオブジェクトをジェネリックデータ型 ( またはキャスト) を使ってプロシージャのパラメータインタフェースに渡す場合は、コンポーネントを静的にも動的にもアドレスすることができません。この場合は、上の命令を使用してください。上の命令を実行すると、コンポーネント名や索引番号を使った間接的なアクセスが可能になります。

DATA: BEGIN OF LINE,
COL1 TYPE I VALUE '11',
COL2 TYPE I VALUE '22',
COL3 TYPE I VALUE '33',
END OF LINE.
DATA COMP(5) VALUE 'COL3'.
FIELD-SYMBOLS: <F1>, <F2>, <F3>.
ASSIGN LINE TO <F1>.
ASSIGN COMP TO
<F2>.
DO 3 TIMES.
ASSIGN
COMPONENT SY-INDEX OF STRUCTURE <F1> TO <F3>.
WRITE
<F3>.
ENDDO.
ASSIGN COMPONENT <F2> OF STRUCTURE <F1>
TO <F3>.
WRITE / <F3>.
出力は次のようになります。
11 22 33
33
フィールドシンボル <F1> は構造 LINE を、<F2> は項目 COMP を指しています。DO ループ では、LINE のコンポーネントは番号で指定され、1 つずつ <F3> に割り当てられます。ループ後、LINE のコンポーネント COL3 は、名前で指定され、<F3> に割り当てられます。ASSIGN COMPONENT が、<F1> のコンポーネントをアドレスする唯一の方法です。<F1>-COL1 といったデータ型は、正しい構文ではありません。
