Funktion
Die MOVE-Anweisung überträgt Daten von einem Datenfeld in ein oder mehrere andere Datenfelder.
Format 1 | der MOVE-Anweisung überträgt ein Datenfeld in ein oder mehrere andere Datenfelder. |
Format 2 | der MOVE-Anweisung überträgt einander entsprechende Datenfelder von einer Gruppe zu einer anderen. |
Format 1
MOVE {bezeichner-1 | literal} TO {bezeichner-2}...
Syntaxregeln
Ein Indexdatenfeld, ein Zeigerdatenfeld oder ein Datenfeld der Klasse objekt darf nicht als Operand in einer MOVE-Anweisung auftreten.
bezeichner-2 darf kein Gruppendatenfeld sein, das Datenfelder der Klasse objekt oder zeiger enthält. Ist bezeichner-2 ein stark typisiertes Gruppendatenfeld, so muss bezeichner-1 als Gruppendatenfeld des gleichen Typs beschrieben sein.
bezeichner-1 bzw. literal sind Sendefelder.
bezeichner-2 ist ein Empfangsfeld.
Die figurative Konstante SPACE darf nicht in numerische oder numerisch druckaufbereitete Datenelemente übertragen werden.
Die figurative Konstante ZERO darf nicht in alphabetische Datenelemente übertragen werden.
Tabelle 28 zeigt die in einer MOVE-Anweisung zulässigen Übertragungen und deren Art an.
Empfangsfeld Sendefeld | Grup- | Al- | Al- | Na- | Extern | Alpha- | Extern | Stark | |
Gruppe | nn0 | nn0 | nn0 | - | nn0 | nn0 | nn0 | - | |
Alphabetisch | nn0 | nn | nn | nn1 | - | nn | - | - | |
Alphanumerisch, Alphanumerisches Literal | nn0 | nn | nn | nn1 | nu2 | nn | nu2 | - | |
National, Nationales Literal | - | - | - | nn | - | - | - | - | |
Extern dezimal, | ganzzahlig | nn0 | - | nn | nn1 | nu | nn | nu | - |
nicht ganzzahlig | nn0 | - | - | - | nu | - | nu | - | |
Numerisch druckaufbereitet | nn0 | - | nn | nn1 | nu1 | nn | nu1 | - | |
Alphanumerisch druckaufbereitet | nn0 | nn | nn | nn1 | - | nn | - | - | |
Extern Gleitpunkt | nn0 | - | - | - | nu | - | nu | - | |
Intern Gleitpunkt, Gleitpunktliteral | nn0 | - | - | - | nu3 | - | nu | - | |
Stark typisiert | nn0 | nn0 | nn0 | - | nn0 | nn0 | nn0 | nn01) |
Tabelle 28: Zulässige Übertragungen bei Element- und Gruppenübertragungen 2)
1) nur für Empfangsfeld vom gleichen Typ
2) Tabelleneinträge:
-- | = | Übertragung ist nicht erlaubt |
nn | = | nichtnumerische Übertragung für Datenelemente |
nn0 | = | nichtnumerische Übertragung für Gruppen (ohne Konvertierung, ohne Editierung, ohne Deeditierung) |
nn1 | = | nichtnumerische Übertragung mit Konvertierung der Darstellung jedes Zeichens von EBCDIC zu UTF-16 |
nu | = | numerische Übertragung |
nu1 | = | numerische Übertragung nach Deeditierung des Sendefeldes |
nu2 | = | numerische Übertragung, wobei das Sendefeld wie ein extern dezimales Datenelement behandelt wird |
nu3 | = | numerische Übertragung mit Rundung |
Allgemeine Regeln
bezeichner-1 oder literal werden in jedes durch bezeichner-2 angesprochene Datenfeld in der angegebenen Reihenfolge übertragen.
Jede Subskribierung, Indizierung, Teilfeldselektion und Längenberechnung im Zusammenhang mit bezeichner-2 wird unmittelbar vor der Übertragung der Daten in das entsprechende Datenfeld durchgeführt. Ist bezeichner-2 ein null-längiges Datenfeld, so wird dieses durch die MOVE-Anweisung nicht verändert.
Jede Subskribierung, Indizierung, Teilfeldselektion, Funktionswertberechnung und Längenberechnung im Zusammenhang mit bezeichner-1 wird nur einmal vor der ersten Übertragung durchgeführt. Ist bezeichner-1 ein null-längiges Datenfeld, so wird die MOVE-Anweisung ausgeführt, als wäre SPACE als Sendefeld angegeben.
Jede erforderliche Konvertierung der Daten von einer internen Darstellungsform in eine andere findet während gültiger Übertragungen statt, ebenso wie die ggf. geforderte Druckaufbereitung des Empfangsfeldes.
Jede Übertragung, bei der das Sendefeld ein Literal oder Datenelement ist und das Empfangsfeld ebenfalls ein Datenelement ist, ist eine Elementübertragung. In einer MOVE-Anweisung von Format 1 wird eine nationale Gruppe wie ein Datenelement behandelt.
Jede andere Übertragung ist eine Gruppenübertragung. Die Gruppenübertragung entspricht einer Elementübertragung mit alphanumerischem Sende- und Empfangsfeld mit dem Unterschied, dass dabei keine Konvertierung erfolgt, d.h. das Empfangsfeld wird aufgefüllt ohne die Datengruppen bzw. Datenfelder zu berücksichtigen, die im Sende- und Empfangsfeld enthalten sind.
(Besonderheiten im Zusammenhang mit der OCCURS DEPENDING-Angabe siehe Allgemeine Regel 14 der OCCURS-Klausel auf "OCCURS-Klausel" ).Jede Druckaufbereitung, die für ein Empfangsdatenfeld angegeben ist, wird während einer Elementübertragung durchgeführt (einige Beispiele sind unten aufgeführt).
Deeditierung findet nur dann statt, wenn das Sendefeld numerisch druckaufbereitet und das Empfangsfeld numerisch oder numerisch druckaufbereitet ist.
Es gibt zwei Arten von Elementübertragungen:
Eine nichtnumerische Übertragung findet statt, wenn das Empfangsfeld ein alphanumerisch druckaufbereitetes, ein alphanumerisches, ein alphabetisches oder ein nationales Feld ist.
Ausrichtung und Auffüllen mit Leerzeichen erfolgen entsprechend Abschnitt " 5. Ausrichtung von Daten" auf "Konzept der maschinenunabhängigen Datenbeschreibung".
Ist das Sendefeld als numerisch mit Vorzeichen beschrieben, wird das Vorzeichen nicht übertragen. Belegt das Vorzeichen eine eigene Zeichenposition, wird es nicht übertragen und die Länge des Sendefeldes wird um 1 Zeichen vermindert angenommen.
Weicht die USAGE-Klausel des Sendefeldes von der des Empfangsfeldes ab, so findet eine Konvertierung des Sendefeldes zur internen Darstellung des Empfangsfeldes statt.
Ist das Sendefeld numerisch und enthält das Maskenzeichen 'P', werden alle diese Zeichenstellen bei der Größe des Sendefeldes mitgezählt und angenommen, dass sie den Wert 0 enthalten.
Eine numerische Übertragung findet statt, wenn das Empfangsfeld numerisch oder numerisch druckaufbereitet ist.
Ausrichtung und Auffüllen mit Nullen erfolgen entsprechend Abschnitt "5. Ausrichtung von Daten" auf "Konzept der maschinenunabhängigen Datenbeschreibung".
Ist das Sendefeld numerisch druckaufbereitet, wird es deeditiert, um seinen numerischen Wert zu bestimmen. Dieser Wert wird in das Empfangsfeld übertragen.
Ist das Empfangsfeld mit Vorzeichen beschrieben, so wird das Vorzeichen des Sendefeldes übertragen. Ist das Sendefeld ohne Vorzeichen, wird im Empfangsfeld ein positives Vorzeichen erzeugt.
Ist das Empfangsfeld ohne Vorzeichen, wird der absolute Wert des Sendefeldes übertragen und im Empfangsfeld kein Vorzeichen erzeugt.
Ist das Sendefeld alphanumerisch, wird es wie ein extern dezimales Datenelement behandelt. Es darf nur numerische Zeichen enthalten. Ist es länger als 31 Zeichen, so werden nur die 31 am weitesten rechts stehenden Zeichen verwendet.
Jede Konvertierung zwischen verschiedenen Arten der internen Darstellung erfolgt während erlaubter Elementübertragungen. Ebenso erfolgt die Konvertierung von alphanumerischer zu nationaler Zeichendarstellung. Existiert dabei für ein alphanumerisches Zeichen im Sendefeld kein entsprechendes nationales Zeichen, so wird im Empfangsfeld dafür das Ersatzzeichen "Punkt" verwendet und die Ausnahmesituation EC-DATA-CONVERSION tritt auf.
Tritt die Ausnahmesituation EC-DATA-CONVERSION auf, so wird das Empfangsfeld immer verändert, bevor eine ggf. vorhandene USE-Prozedur aktiviert wird (siehe auch Abschnitt "NATIONAL-OF - nationale Zeichendarstellung").
Belegen die Sende- oder Empfangsoperanden einer MOVE-Anweisung den gleichen Internspeicherbereich (d.h. überlagern sich die Operanden), so ist das Ergebnis der Übertragung unvorhersagbar.
Figurative Konstanten werden wie numerische, alphanumerische oder nationale Literale behandelt, abhängig von der Art des Empfangsfeldes. Die folgende Tabelle zeigt die sich ergebende Kategorie des Literals.
figurative Konstante
Art des Empfangsfeldes
Kategorie der
figurativen KonstanteALL Alphanumerisches Literal
unabhängig davon
Alphanumerisch
ALL Nationales Literal
unabhängig davon
National
ALL Symbolisches-Zeichen
unabhängig davon
Alphanumerisch
HIGH-VALUE, LOW-VALUE,
QUOTE
Gruppe, Alphanumerisch,
Alphanumerisch druckaufbereitet
Alphanumerisch
National
National
SPACE
Gruppe, Alphanumerisch,
Alphabetisch, Alphanumerisch druckaufbereitet
Alphanumerisch
National
National
ZERO
Gruppe, Alphanumerisch,
Alphanumerisch druckaufbereitet
Alphanumerisch
National
National
Extern dezimal, Binär, Intern
dezimal, Numerisch druckaufbereitet, Extern Gleitpunkt, Intern Gleitpunkt
Numerisch
Tabelle 29: Übertragung von figurativen Konstanten
Beispiel 8-55
Sendefeld | Empfangsfeld | Begründung | ||
Masken- zeichenfolge | Inhalt | Masken- zeichenfolge | Inhalt | |
XXX | M8N | XXXXX | M8N | Ist für das Empfangsfeld keine JUSTIFIED RIGHT-Klausel angegeben, werden die Zeichen von links nach rechts übertragen. Da die zu übertragenden Daten das Empfangsfeld nicht vollständig ausfüllen, werden die verbleibenden Stellen mit Leerzeichen aufgefüllt. |
AAAAAA | XYZABC | AAA AAA JUST RIGHT | XYZ ABC | Da das Sendefeld länger als das Empfangsfeld ist, wird die Übertragung abgebrochen, sobald das Empfangsfeld gefüllt ist. Die übrigen Zeichen werden ignoriert. |
999PPP | 456 | XXXXX | 45600 | An Stellen des Maskenzeichens P werden Nullen angenommen. Das Sendefeld hat somit 6 Zeichen. Sie werden linksbündig in das Empfangsfeld übertragen. Die übrigen Zeichen werden ignoriert. |
S999 | -333 | XXX | 333 | Hat das Sendefeld ein Vorzeichen, wird der absolute Wert übertragen. |
9V999 | 8765 | V99 | 76 | Die Felder werden am Dezimalpunkt ausgerichtet. Das Sendefeld hat sowohl links als auch rechts vom Dezimalpunkt mehr Stellen als das Empfangsfeld. Es werden an beiden Enden Stellen abgeschnitten. |
9V9 | 12 | 99V99 | 0120 | Ist das Empfangsfeld größer als das Sendefeld, werden die nicht verwendeten Zeichenstellen mit Nullen oder mit Druckaufbereitungszeichen aufgefüllt. |
99V99 | 6789 | $$$99.99 | 'BLANK' $67.89 | |
S999 | -333 | 9999 | 333 | Hat das Sendefeld ein Vorzeichen und das Empfangsfeld kein Vorzeichen, wird der absolute Wert des Sendefeldes übertragen. |
99 | 15 | 999 | 015 | Ist kein Rechendezimalpunkt vorhanden, werden die Daten rechtsbündig ins Empfangsfeld übertragen. |
XXX | 123 | 99V9 | 230 | Das Sendefeld wird wie ein ganzzahliges numerisches Feld mit 3 Ziffernstellen behandelt. Die führende Hunderterstelle hat kein Platz im Empfangsfeld und wird abgeschnitten. |
Format 2
MOVE {CORRESPONDING | CORR} bezeichner-1 TO {bezeichner-2}...
Syntaxregeln
Die folgenden Regeln für bezeichner-2 beziehen sich gleichfalls auf alle weiteren Bezeichner, die nach bezeichner-2 angegeben sind.
CORR ist die Abkürzung für CORRESPONDING.
bezeichner-1 bezeichnet eine Datengruppe, die die zu übertragenden Datenelemente enthält.
bezeichner-2 bezeichnet eine Datengruppe, die die Empfangsfelder für die Übertragung enthält.
Die ausgewählten Datenfelder innerhalb des ersten Operanden (bezeichner-1) werden in die entsprechenden Datenfelder innerhalb des zweiten Operanden (bezeichner-2) übertragen. Die Datenfelder einer jeden Gruppe werden als entsprechend betrachtet, wenn beide Datenfelder gleiche Namen und Kennzeichnung haben, bis zu, aber nicht unbedingt einschließlich bezeichner-1 und bezeichner-2.
Jede Subskribierung oder Indizierung im Zusammenhang mit bezeichner-2 wird unmittelbar vor der Übertragung der Daten in das entsprechende Datenfeld aufgelöst.
Jede erforderliche Konvertierung der Daten von einer internen Darstellungsform in eine andere findet während gültiger Übertragungen statt, ebenso wie die ggf. geforderte Druckaufbereitung des Empfangsfeldes. Dies wird in den folgenden Allgemeinen Regeln genauer beschrieben.
Allgemeine Regeln
Die Ergebnisse der MOVE CORRESPONDING-Anweisung sind die gleichen, als ob der Benutzer jedes Paar von entsprechenden Bezeichnern in einer getrennten MOVE-Anweisung des Formats 1 angegeben hätte (weitere Regeln siehe "CORRESPONDING-Angabe").
Mindestens eines der Datenfelder in einem Paar entsprechender Datenfelder muss ein Datenelement sein. (Man beachte, dass die MOVE-Anweisung sich in dieser Hinsicht von arithmetischen Anweisungen unterscheidet: In arithmetischen Anweisungen, die die CORRESPONDING-Angabe verwenden, müssen die beiden entsprechenden Felder Datenelemente sein.)
Ein Datenfeld, das bezeichner-1 oder bezeichner-2 untergeordnet ist und eine OCCURS-, REDEFINES-, USAGE IS INDEX-, USAGE IS POINTER-, USAGE ISPROGRAM-POINTER-, USAGE ISOBJECT REFERENCE- oder RENAMES-Klausel enthält, wird ignoriert. bezeichner-1 oder bezeichner-2 können jedoch selbst REDEFINES- oder OCCURS-Klauseln haben oder einem Datenfeld mit einer REDEFINES- oder OCCURS-Klausel untergeordnet sein.
In einer MOVE-Anweisung von Format 2 wird eine nationale Gruppe wie eine Gruppe behandelt (und nicht wie ein Datenelement).
Beispiel 8-56
Anweisung in der PROCEDURE DIVISION:
MOVE CORRESPONDING ARBEITER-SATZ TO LOHN-KONTROLLE.
Einträge in der DATA DIVISION: | |
01 ARBEITER-SATZ. 02 ARBEITER-NR. 03 ARBEITS-ORT... 03 STECHUHR-NR. 04 SCHICHT-KENNZAHL... 04 KONTROLL-NR... 02 LOHN. 03 ARBEITS-STUNDEN... 03 AUSZAHLUNG... 02 STEUER-SATZ... 02 ABZUEGE... | 01 LOHN-KONTROLLE. 02 ARBEITER-NR. 03 STECHUHR-NR... 03 FILLER... 02 ABZUEGE. 03 STEUER-SATZ... 03 STEUER-BETRAG... 03 VORSCHUSS... 02 LOHN. 03 ARBEITS-STUNDEN... 03 AUSZAHLUNG... 02 NETTO-ZAHLUNG... 02 ARBEITER-NAME... 03 SCHICHT-KENNZAHL... |
Entsprechend den Regeln der MOVE CORRESPONDING-Anweisung werden folgende Datenfelder übertragen:
Sendefeld | Empfangsfeld |
|
|
Die folgenden Felder werden aus den angegebenen Gründen nicht übertragen:
Feld | Begründung |
| Feld ist in keiner der beiden Gruppen ein Datenelement. |
| Feld tritt in LOHN-KONTROLLE nicht auf. |
| Kennzeichnung ist nicht die gleiche wie in LOHN-KONTROLLE |
| Feld kommt in LOHN-KONTROLLE nicht vor. |
| Feld ist in keiner der beiden Gruppen ein Datenelement |
| Kennzeichnung ist nicht die gleiche wie in LOHN-KONTROLLE. |