move

Die EGL-Anweisung 'move' kopiert Daten mittels einer von drei Möglichkeiten:
Es gelten die folgenden allgemeinen Regeln:

Syntax

Syntaxdiagramm für die Anweisung 'move'

Die Bedeutung von 'Quelle' und 'Ziel' hängt von den Optionen für die Anweisung ab. Die nachstehenden Abschnitte zeigen die unterschiedlichen Formate der Anweisung 'move'.

move (kein Qualifikationsmerkmal)

Wenn Sie kein Qualifikationsmerkmal vom Typ 'byName' oder 'byPosition' für die Anweisung 'move' angeben, versetzt EGL die Informationen Byte für Byte aus der Quelle in das Ziel. Die Quelle muss mit dem Ziel zuordnungskompatibel sein. Weitere Informationen finden Sie im Thema 'Zuordnungskompatibilität in EGL'.

move byName

Bei diesem Format der Anweisung 'move' ordnet EGL Daten aus jedem Feld in der Quelle einem Feld desselben Namens im Ziel zu. Die Operation wird in der Reihenfolge ausgeführt, in der die Felder in der Quelle vorliegen. Die Quelle muss mit dem Ziel zuordnungskompatibel sein. Weitere Informationen finden Sie im Thema 'Zuordnungskompatibilität in EGL'.

Bei der Quelle oder dem Ziel kann es sich um Folgendes handeln:
  • Eine dynamische Feldgruppe strukturierter Datensätze
  • Einen nicht strukturierten Datensatz
  • Einen strukturierten Datensatz
  • Ein benanntes Strukturfeld mit einer Unterstruktur
  • Eine Strukturfeldgruppe mit einer Unterstruktur
  • Eine Datentabelle
  • Ein Formular

Ein Strukturfeld mit einem Stern (*) als Name ist nicht als Quellenfeld verfügbar, wobei jedoch jedes benannte Feld in einer Unterstruktur dieses Felds verfügbar ist.

Die Operation ist in folgenden Fällen nicht gültig:
  • Mindestens zwei Felder in der Quelle haben denselben Namen.
  • Mindestens zwei Felder im Ziel haben denselben Namen.
  • Das Quellenfeld ist entweder eine mehrdimensionale Strukturfeldgruppe oder eine eindimensionale Strukturfeldgruppe innerhalb einer Feldgruppe.
  • Das Zielfeld ist entweder eine mehrdimensionale Strukturfeldgruppe oder eine eindimensionale Strukturfeldgruppe innerhalb einer Feldgruppe.
Die Operation wird wie folgt ausgeführt:
  • Im einfachsten Fall sind Quelle und Ziel jeweils eine festgelegte Struktur, jedoch kein Feldgruppenelement. Es gelten die folgenden Regeln:
    • Wenn Sie keine Feldgruppen kopieren, wird der Wert jedes untergeordneten Felds in der Quellenstruktur in ein Feld desselben Namens in der Zielstruktur kopiert.
    • Wenn Sie eine Feldgruppe aus Strukturfeldern in eine ebensolche Feldgruppe kopieren, wird die Operation wie eine Anweisung vom Typ 'move for all' behandelt. Siehe 'Anweisung 'move' für Feldgruppen' in diesem Thema.
  • In einem anderen Fall ist die Quelle oder das Ziel möglicherweise ein Datensatz. Die Felder der Quelle werden den Zielfeldern desselben Namens zugeordnet.
  • Ein etwas komplizierterer Fall lässt sich am besten anhand eines Beispiels veranschaulichen. Die Quelle ist eine Feldgruppe aus 10 strukturierten Datensätzen, die jeweils die folgenden Strukturfelder enthalten:
      10 empnum  CHAR(3);
      10 empname CHAR(20); 
    Das Ziel ist eine festgelegte Struktur mit den folgenden Strukturfeldern:
      10 empnum CHAR(3)[10];
      10 empname CHAR(20)[10];
    Die Operation 'move' führt die folgenden Aktionen aus:
    • Der Wert des Felds 'empnum' im ersten strukturierten Datensatz wird in das erste Element der Strukturfeldgruppe 'empnum' kopiert.
    • Der Wert des Felds 'empname' im ersten strukturierten Datensatz wird in das erste Element der Strukturfeldgruppe 'empname' kopiert.
    • Der Prozess wird für jeden strukturierten Datensatz in der Quellenfeldgruppe wiederholt, d. h., die Felder im zweiten strukturierten Datensatz in der Quellenfeldgruppe werden in das zweite Element der entsprechenden Strukturfeldgruppe kopiert usw.
    Eine äquivalente Operation wird ausgeführt, wenn es sich bei der Quelle um einen einzelnen strukturierten Datensatz handelt, der eine Unterstruktur wie die folgende aufweist:
      10 mySubStructure[10]
        15 empnum  CHAR(3);
        15 empname CHAR(20);    
  • Abschließend gibt es noch den Fall, in dem die Quelle ein strukturierter Datensatz ist, der die folgenden Strukturfelder enthält:
      10 empnum  CHAR(3);
      10 empname CHAR(20)[10]; 
    Das Ziel ist ein Formular, ein strukturierter Datensatz oder ein Strukturfeld mit folgender Unterstruktur:
      10 empnum CHAR(3)[10];
      10 empname CHAR(20);

    EGL kopiert den Wert des Felds 'empnum' aus der Quelle in das erste Element von 'empnum' im Ziel und den Wert des ersten Elements von 'empname' aus der Quelle in das Feld 'empname' im Ziel. Die Anweisung 'move' wird an dieser Stelle beendet, da keine weiteren Kopiervorgänge stattfinden können, ohne das Ziel 'empname' in eine Feldgruppe zu ändern.

move byPosition

Bei diesem Format der Anweisung 'move' kopiert EGL Daten aus jedem Feld in der Quelle in ein Feld an derselben Position im Ziel. EGL kopiert jedes Feld Byte für Byte in der Reihenfolge der entsprechenden Position in der Quelle. Die Quelle muss mit dem Ziel zuordnungskompatibel sein. Weitere Informationen finden Sie im Thema 'Zuordnungskompatibilität in EGL'.

Bei der Quelle oder dem Ziel kann es sich um folgende Datentypen handeln:
  • Eine dynamische Feldgruppe strukturierter Datensätze
  • Einen Datensatz
  • Einen strukturierten Datensatz
  • Ein Strukturfeld mit einer Unterstruktur
  • Eine Strukturfeldgruppe mit einer Unterstruktur
  • Eine Datentabelle

Wenn Sie Daten zwischen einem Datensatz und einem strukturierten Datensatz oder Feld versetzen, werden nur die Felder der höchsten Ebene des Ziels berücksichtigt. Wenn Sie Daten zwischen zwei strukturierten Datensätzen oder Feldern versetzen, werden jeweils nur die Felder der niedrigsten Ebene (Blattelemente) berücksichtigt.

Die Operation ist nicht gültig, wenn das Quellen- oder Zielfeld eine mehrdimensionale Strukturfeldgruppe oder eine eindimensionale Strukturfeldgruppe innerhalb einer Feldgruppe ist.

Die Operation führt die folgenden Aktionen aus:
  • Im einfachsten Fall sind Quelle und Ziel jeweils eine festgelegte Struktur, jedoch kein Feldgruppenelement. Es gelten folgende Regeln:
    • Wenn Sie keine Feldgruppen kopieren, kopiert EGL den Wert jedes untergeordneten Felds (Blattelement) in der Quellenstruktur in das untergeordnete Feld (Blattelement) an der entsprechenden Position in der Zielstruktur.
    • Wenn Sie Strukturfelder in eine Feldgruppe aus Strukturfeldern kopieren, wird die Operation wie eine Anweisung vom Typ 'move for all' behandelt. Siehe 'Anweisung 'move' für Feldgruppen' in diesem Thema.
  • In einem anderen Fall ist die Quelle oder das Ziel möglicherweise ein Datensatz. Die Felder der Quelle (je nach Quellentyp die Felder der höchsten Ebene bzw. die untergeordneten Felder (Blattelemente)) werden den Zielfeldern (je nach Zieltyp den Feldern der höchsten Ebene bzw. den untergeordneten Feldern (Blattelementen)) zugeordnet.
Das folgende Beispiel veranschaulicht eine Versetzungsoperation (move) nach Position (byPosition), wobei äquivalente Felder in den beiden Datensätzen unterschiedliche Namen haben:
record myCustomer type BasicRecord
  customerNumber CHAR(6);
  customerName CHAR(25);
end

record mySavedCustomer type BasicRecord
  savedCustomerNumber CHAR(6);
  savedCustomerName CHAR(25);
end

...

move myCustomer to mySavedCustomer byPosition;

Anweisung 'move' bei Feldgruppen

Wenn das Ziel der Anweisung 'move' eine Feldgruppe ist, können Sie Werte zu allen Elementen (for all) oder zu einer sequenziellen Untergruppe von Elementen (for anzahl) zuordnen.

Bei der Quelle kann es sich um folgende Datentypen handeln:
  • Eine dynamische Feldgruppe aus Datensätzen, strukturierten Datensätzen oder Basiselementvariablen
  • Einen Datensatz
  • Einen strukturierten Datensatz
  • Ein Strukturfeld mit oder ohne Unterstruktur
  • Eine Strukturfeldgruppe mit oder ohne Unterstruktur
  • Eine Basiselementvariable
  • Ein Literal oder eine Konstante
Beim Ziel kann es sich um folgende Datentypen handeln:
  • Eine dynamische Feldgruppe aus Datensätzen, strukturierten Datensätzen oder Basiselementvariablen
  • Eine Strukturfeldgruppe mit oder ohne Unterstruktur
  • Ein Element einer dynamischen Feldgruppe oder einer Strukturfeldgruppe

Die Anweisung 'move' bei Feldgruppen entspricht mehreren EGL-Kopiervorgängen vom Typ 'Byte für Byte' - einem Kopiervorgang pro Element in der Zielfeldgruppe. Wenn ein versuchter Kopiervorgang nicht gültig ist, tritt ein Fehler auf. Ausführliche Informationen zur Gültigkeit finden Sie unter Zuordnungen.

Wird 'for all' oder 'for anzahl' verwendet, werden Unterstrukturen von der Anweisung 'move' ignoriert.

Ist die Quelle eine Feldgruppe oder ein Element in einer Feldgruppe, werden alle aufeinanderfolgenden Elemente der Quellenfeldgruppe jeweils in das nächste sequenzielle Element der Zielfeldgruppe kopiert. Ziel- und Quellenfeldgruppe müssen von der Länge her nicht übereinstimmen. Die Operation endet, wenn die Daten des letzten Elements kopiert wurden, für das es ein übereinstimmendes Element in der anderen Feldgruppe gibt.

Wenn die Quelle ein Feldgruppenelement ist, wird sie wie eine Feldgruppe behandelt, in der das angegebene Element das erste Element ist. Die vorherigen Elemente werden ignoriert.

Wenn die Quelle weder eine Feldgruppe noch ein Feldgruppenelement ist, initialisiert die Operation jedes Element der Zielfeldgruppe mit dem Quellenwert.

Wenn die Quelle eine Datensatzfeldgruppe (oder ein Element einer solchen Feldgruppe) ist, muss das Ziel eine Datensatzfeldgruppe sein. Ist die Quelle eine Feldgruppe aus Basiselementvariablen (oder ein Element einer solchen Feldgruppe), muss das Ziel entweder eine Feldgruppe aus Basiselementvariablen oder eine Strukturfeldgruppe sein. Ist die Quelle eine Strukturfeldgruppe (oder ein Element einer solchen Feldgruppe), muss das Ziel entweder eine Feldgruppe aus Basiselementvariablen oder eine Strukturfeldgruppe sein.

Wenn Sie die Methode 'for anzahl' verwenden, gibt 'anzahl' an, wie viele Zielelemente Daten erhalten sollen. Für 'anzahl' sind folgende Werte möglich:
  • Ein ganzzahliges Literal
  • Eine Variable, die von EGL als ganze Zahl ausgewertet wird
  • Ein numerischer Ausdruck, jedoch kein Funktionsaufruf
Es gibt folgende Beispiele für die Methode 'for anzahl':
  • Bei der folgenden Anweisung wird "abc" in die Elemente 7, 8 und 9 in der Zielfeldgruppe target versetzt:
      move "abc" to target[7] for 3;
  • Bei der folgenden Anweisung werden die Elemente 2, 3 und 4 aus source (Quelle) in die Elemente 7, 8 und 9 in target (Ziel) versetzt:
      move source[2] to target[7] for 3;

Anweisung 'move' mit Änderungswert 'withV60Compat'

Der Änderungswert 'withV60Compat' wird in Programmen verwendet, die aus EGL-Version 6 oder früher bzw. aus VisualAge Generator-Programmen migriert worden sind. Sie dürfen diesen Änderungswert nicht in neuem Code verwenden.

Verwenden Sie diesen Änderungswert, wenn die Variablen, auf die die Anweisung 'move' verweist, in einer eigenständigen Funktion deklariert sind, bei der die Migration nicht den Variablentyp bestimmen kann. Diese Option bietet Kompatibilität für eine Anweisung vom Typ 'move' ohne Änderungswert.

Der Änderungswert 'withV60Compat' stellt folgendes Verhalten bereit:
  • Wenn die Quelle einen der folgenden Werte aufweist, wird die Anweisung wie eine Zuordnungsanweisung behandelt:
    • Eine Basiselementvariable
    • Ein Feld in einer festgelegten Struktur
    • Ein Literal
    • Eine Konstante
  • Andernfalls wird die Anweisung wie eine Anweisung vom Typ 'move byName' (Versetzen nach Namen) behandelt.

Kompatibilität

Tabelle 1. Hinweise zur Kompatibilität für die Anweisung 'move'
Plattform Problem
Rich UI move wird nicht unterstützt.

Feedback