Strukturen komponentenweise zuweisen 

Wenn ein Datenobjekt <s> strukturiert ist, kann mit

ASSIGN COMPONENT <comp> OF STRUCTURE <s> TO <FS>.

eine Komponente <comp> dem Feldsymbol <FS> zugewiesen werden. Die Komponente <comp> kann entweder als Literal oder als Variable angegeben werden. Ist <comp> vom Typ C oder eine Struktur, die keine internen Tabellen als Komponenten hat, wird es als Namen der Komponente interpretiert. Hat <comp> irgendeinen anderen elementaren Datentyp, wird es in Typ I konvertiert und gibt die Nummer der Komponente an. Bei einer erfolgreichen Zuweisung erhält SY-SUBRC den Wert 0 , ansonsten 4.

Diese Anweisung ist sehr wichtig für die dynamische Adressierung von Komponenten in strukturierten Datenobjekten. Wenn ein strukturiertes Datenobjekt generisch oder über Casting an ein Feldsymbol oder an die Parameterschnittstelle einer Prozedur übergeben wird, kann im Programm weder statisch noch dynamisch über ihre Namen auf die Komponenten zugegriffen werden. Statt dessen muß obige Anweisung verwendet werden, die einen indirekten Zugriff sowohl über den Namen als auch über eine Nummer erlaubt.

REPORT demo_field_symbols_assign_comp .

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) TYPE c VALUE 'COL3'.

FIELD-SYMBOLS: <f1> TYPE ANY, <f2> TYPE ANY, <f3> TYPE ANY.

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>.

Die Listenausgabe ist:

11         22         33

33

Das Feldsymbol <F1> zeigt auf die Struktur LINE, <F2> zeigt auf das Feld COMP. In der DO-Schleife werden die Komponenten von LINE durch ihre Nummern adressiert nacheinander <F3> zugewiesen. Nach der Schleife wird die Komponente COL3 über ihren Namen <F3> zugewiesen. Es ist zu beachten, daß die Zuweisung ASSIGN COMPONENT die einzige Möglichkeit ist, die Komponenten von <F1> zu adressieren. Die Angaben <F1>-COL1 etc. sind syntaktisch nicht möglich.