Anfang des Inhaltsbereichs

Werte mit MOVE zuweisen Dokument im Navigationsbaum lokalisieren

Um den Wert eines beliebigen Datenobjekts <f1> einer Variablen <f2> zuzuweisen, verwendet man die Anweisung:

MOVE <f1> TO <f2>.

oder die völlig gleichbedeutende Anweisung

<f2> = <f1>.

Der Inhalt von <f1> bleibt unverändert. <f1> muß also keine Variable, sondern kann z.B. auch ein Literal, ein Textsymbol oder eine Konstante sein. Dezimalstellen müssen unabhängig vom Benutzerstammsatz immer mit einem Punkt (.) angegeben werden.

Mehrfachzuweisungen

<f4> = <f3> = <f2> = <f1>.

sind möglich. ABAP verarbeitet sie wie folgt von rechts nach links:

MOVE <f1> TO <f2>.
MOVE <f2> TO <f3>.
MOVE <f3> TO <f4>.

In der MOVE-Anweisung (bzw. mit dem Zuweisungsoperator) können die Namen von Quell- und Zielfelder nicht dynamisch als Inhalte anderer Felder angegeben werden. Falls dies erforderlich ist, müssen Feldsymbole verwendet werden.

Bezüglich der Datentypen von <f1> und <f2> sind folgende drei Fälle zu unterscheiden:

  1. Die Datenobjekte <f1> und <f2> vollständig kompatibel, d.h. sie stimmen in allen technischen Eigenschaften (Datentyp, Feldlänge, Anzahl der Dezimalstellen) überein. Der Inhalt des Quellfelds <f1> wird ohne weitere Manipulation Byte für Byte in das Zielfeld <f2> übertragen. In diesem Fall hat die MOVE-Anweisung die beste Performance.
  2. Die Datenobjekte <f1> und <f2> sind nicht kompatibel. Hierfür genügt es z.B. schon, daß sie zwar vom gleichen Typ aber von unterschiedlicher Länge sind. Der Inhalt des Quellfelds <f1> wird so konvertiert, daß er zum Datentyp von <f2> passt und dann erst übertragen. Dies setzt eine Konvertierungsregel zwischen den Datentypen von <f1> und <f2> voraus. Je nach Aufwendigkeit der Konvertierung sinkt die Performance der MOVE-Anweisung.
  3. Die Datenobjekte <f1> und <f2> sind weder kompatibel noch konvertibel. Es ist keine Zuweisung möglich. Falls dies statisch erkannt werden kann, kommt es zu einem Syntax-, ansonsten zu einem Laufzeitfehler.

Quellfelder und Zielfelder können also verschiedene Datentypen haben. Im Gegensatz zu anderen Programmiersprachen, wo die Zuweisung zwischen verschiedenen Datentypen oft auf eine geringe Anzahl möglicher Kombinationen beschränkt ist, bietet ABAP eine Vielzahl automatischer Typkonvertierungen.

Beispielsweise kann der Inhalt eines Quellfeldes mit einem elementaren Datentyp einem Zielfeld mit einem beliebigen anderen elementaren Datentyp zugewiesen werden, mit der einzigen Ausnahme, daß keine Zuweisungen zwischen Feldern der eingebauten ABAP-Typen D und T möglich sind. ABAP unterstützt sogar die Zuweisung zwischen Strukturen und elementaren Datenobjekten und zwischen unterschiedlichen Strukturen.

Beispiel

DATA: t(10) TYPE c,
      number TYPE p DECIMALS 2,
      count  TYPE i.

t = 1111.
MOVE '5.75' TO number.
count = number.

Nach diesen Zuweisungen haben die Felder T, NUMBER, und COUNT die Werte '1111      ', 5,75 und 6. Bei der Zuweisung des Zahlenliterals 1111 an T wird die Zahl in ein Characterfeld der Länge 10 konvertiert. Bei der Zuweisung von NUMBER zu COUNT wird die Dezimalzahl in eine ganze Zahl gerundet (Voraussetzung: das Programmattribut Festpunktarithmetik ist gesetzt).

Werte zwischen Komponenten von Strukturen zuweisen

Um Werte zwischen Strukturen komponentenweise zuzuweisen, verwendet man die Anweisung

MOVE-CORRESPONDING <struct1> TO <struct2>.

Diese Anweisung weist den Inhalt von Komponenten der Struktur <struct1> den namensgleichen Komponenten der Struktut <struct2> zu.

Das System löst obige Anweisung in jeweils eine MOVE-Anweisung pro Namenspaar auf:

MOVE STRUCT1-<ci> TO STRUCT2-<c i>.

Alle erforderlichen Typkonvertierungen werden einzeln vorgenommen. Dieses Verfahren unterscheidet sich von der Wertzuweisung für komplette Strukturen mit der MOVE-Anweisung. In diesem Fall gelten die Konvertierungsregeln für Strukturen.

Beispiel

DATA: BEGIN OF address,
        firstname(20) TYPE c VALUE 'Fred',
        surname(20) TYPE c VALUE 'Flintstone',
        initials(4) TYPE c VALUE 'FF',
        street(20) TYPE c VALUE 'Cave Avenue',
        number TYPE i VALUE '11',
        postcode(5) TYPE n VALUE '98765',
        city(20) TYPE c VALUE  'Bedrock',
      END OF address.

DATA: BEGIN OF name,
        surname(20) TYPE c,
        firstname(20) TYPE c,
        initials(4) TYPE c,
        title(10) TYPE c VALUE 'Mister',
      END OF name.

MOVE-CORRESPONDING address TO name.

In diesem Beispiel werden die Werte für NAME-SURNAME, NAME-FIRSTNAME und NAME-INITIALS auf 'Flintstone','Fred' und 'FF' gesetzt. NAME-TITLE behält jeweils den Wert 'Mister'.

Diese Grafik wird im zugehörigen Text erklärt

Ende des Inhaltsbereichs