【ABAP】ASSIGN COMPONENT 〜 OFASSIGN COMPONENTの使い方備忘録

はじめに

ABAPやっててASSIGN COMPONENT 〜 OFASSIGN COMPONENT〜の使い方に関する記事が少なかったので、備忘録的に残します。

ABAPerの方は是非お役立てください。

文法の意味

ASSIGN COMPONENT com OF STRUCTURE st TO <fs>.

構造名「st」内の指定したコンポーネント名「com」にフィールドシンボル<fs>を割り当てることができます。

*構造名:profile
DATA:BEGI OF profile,
    name TYPE C VALUE 'TARO', "太郎"
    age  TYPE I VALUE 10,     "10才"
END OF profile.

*コンポーネント指定
DATA co TYPE C VALUE "age".

*フィールドシンボルを定義
FIELD-SYNBOLS:<fs> TYPE ANY.
ASSIGN COMPONENT co OF STRUCTURE profile TO <fs>.

WRITE <fs>.
出力結果:10才

上記のようなソースコードの場合、
ASSIGN COMPONENT co OF STRUCTURE profile TO <fs>.は以下の処理をしています。

  1. name,ageというコンポーネントを持つ構造「profile」から、「co」でageを指定する
  2. 指定されたageにフィールドシンボル<fs>を割り当てる
  3. <fs>を出力すると、ageのVALUE値「10」が出力される
スポンサーリンク

応用①

構造内のすべてをフィールドシンボルに割り当てたいときは以下のようにします。

*構造名:profile
DATA:BEGI OF profile,
    name TYPE C VALUE 'TARO', "太郎"
    age  TYPE I VALUE 10,     "10才"
END OF profile.

*フィールドシンボルを定義
FIELD-SYNBOLS:<fs> TYPE ANY.

DO 2 TIMES
    ASSIGN COMPONENT sy-index OF STRUCTURE profile TO <fs>.
    WRITE <fs>.
ENDDO.
出力結果:太郎 10才

構造内のコンポーネントの数だけ処理を行い、fsにコンポーネントを1つ1つ割り当て出力しています。

スポンサーリンク

応用②

コンポーネントの箇所はシステム項目「sy-index」を使用することで処理数回分、構造内のコンポーネントを指定することができます。

応用①は処理回数を2と定めていますが、以下のように汎用的に対応することもできます。

*構造名:profile
DATA:BEGI OF profile,
    name TYPE C VALUE 'TARO', "太郎"
    age  TYPE I VALUE 10,     "10才"
END OF profile.

*フィールドシンボルを定義
FIELD-SYNBOLS:<fs> TYPE ANY.

*最大処理回数100と定めておく
DO 100 TIMES
    ASSIGN COMPONENT sy-index OF STRUCTURE profile TO <fs>.

    *正しく処理できたかチェック
    IF y-subrc EQ 0.
        WRITE <fs>.
    ELSE
        EXIT
    ENDIF

ENDDO.

とりあえず最大処理回数を決めて置き、ASSIGN COMPONENT sy-index OF STRUCTURE profile TO <fs>.がエラーしたとき、つまり構造内のコンポーネントをすべて割り当てもう割り当てするコンポーネントがないときにEXITし、DO 100 TIMESから抜ける、

なんて方法があります。

以上。

スポンサーリンク

Follow me!

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です