Show TOC Anfang des Inhaltsbereichs

Strukturen komponentenweise zuweisen  Dokument im Navigationsbaum lokalisieren

Wenn ein Datenobjekt struc strukturiert ist, kann mit

ASSIGN COMPONENT comp OF STRUCTURE struc 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 muss obige Anweisung verwendet werden, die einen indirekten Zugriff sowohl über den Namen als auch über eine Nummer erlaubt.

Beispiel

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

 

Ende des Inhaltsbereichs