Dieser Abschnitt behandelt folgende Themen:
Verwandte Statements: ADD | COMPRESS | COMPUTE | DIVIDE | EXAMINE | MULTIPLY | RESET | SEPARATE | SUBTRACT
Gehört zur Funktionsgruppe: Arithmetische Funktionen und Datenzuweisungen
Das Statement MOVE dient dazu, den Wert eines Operanden in einen oder
mehrere andere Operanden (Feld oder Array) zu übertragen.
Eine Natural-Systemfunktion darf nur verwendet werden, wenn das
MOVE-Statement in Verbindung mit einem der folgenden Statements verwendet
wird: AT BREAK-, AT END OF DATA oder AT END OF PAGE.
Siehe auch Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung.
MOVE
[ROUNDED] operand1 [(parameter)]
TO
operand2
|
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | N | A | U | N | P | I | F | B | D | T | L | C | G | O | ja | nein | |
operand2
|
S | A | M | A | U | N | P | I | F | B | D | T | L | C | G | O | ja | ja | ||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung | ||||||
|---|---|---|---|---|---|---|---|
MOVE ROUNDED
|
MOVE ROUNDED-Option:
Diese Option bewirkt, dass
Siehe auch Beispiel 1 - Verschiedene Beispiele für die Benutzung des MOVE-Statements. |
||||||
|
|
Quell- und Zieloperanden:
Weitere Informationen zur Datenübertragungs-Kompatibilität und den Regeln für die Datenübertragung finden Sie im Abschnitt Datenübertragung im Leitfaden zur Programmierung. Ist Ein MOVE #SOURCE TO #TARGET1 #TARGET2 ist identisch mit: MOVE #SOURCE TO #TARGET1 MOVE #SOURCE TO #TARGET2 |
||||||
parameter |
|
||||||
MOVE |
|
operand1 |
|
[(parameter)] | |||
TO |
|
operand2 |
|
||||
|
|
|||||||
Diese Syntax gilt, wenn Sie nur einen Teil des Feldinhalts (einen Teil einer Zeichenkette) eines Quell- und/oder Zieloperanden übertragen wollen. Andernfalls gilt Syntax 1.
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | A | U | B | ja | nein | ||||||||||||
operand2
|
S | A | A | U | B | ja | nein | |||||||||||||
operand3
|
C | S | N | P | I | B* | ja | nein | ||||||||||||
operand4
|
C | S | N | P | I | B* | ja | nein | ||||||||||||
operand5
|
C | S | N | P | I | B* | ja | nein | ||||||||||||
operand6
|
C | S | N | P | I | B* | ja | nein | ||||||||||||
* Siehe Text.
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
MOVE SUBSTRING
|
MOVE SUBSTRING:
Ohne Die
Um zum Beispiel die 5. bis einschließlich 12. Stelle eines Feldes
MOVE SUBSTRING(#A,5,8) TO #B Ist Sie können einen Wert eines alphanumerischen/Unicode oder binären Feldes auch
in einen bestimmten Teil des Zielfeldes übertragen. In der
Um zum Beispiel den Wert eines Feldes MOVE #A TO SUBSTRING(#B,3,4) Wenn Wenn
Wenn Sie
Wenn Anmerkung |
parameter |
Parameter-Option: Siehe parameter unter
Syntax 1.
|
MOVE
|
BY
|
|
[NAME]
|
|
operand1
TO
operand2
|
POSITION
|
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
G | ja | nein | ||||||||||||||||
operand2
|
G | ja | nein | ||||||||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
MOVE BY NAME operand1 TO
operand2
|
MOVE BY NAME-Option:
Mit dieser Option können Sie einzelne in einer Datenstruktur enthaltene Felder in eine andere Datenstruktur übertragen, und zwar unabhängig von ihrer Position innerhalb der Struktur. Ein Feld kann nur übertragen werden, wenn sein Name in beiden Datenstrukturen
vorkommt (dies gilt auch für mit einem Anmerkung Siehe auch Beispiel 2 - Statement MOVE BY NAME. MOVE BY NAME mit Arrays:
Enthalten die Datenstrukturen Arrays, so werden diese bei der Übertragung intern mit dem Index (*) versehen; dies kann zu einem Fehler führen, falls die Arrays nicht den Zuweisungsbedingungen für Arrays entsprechen (siehe Abschnitt Verarbeitung von Arrays im Leitfaden zur Programmierung). Siehe auch Beispiel 3 - MOVE BY NAME mit Arrays. |
MOVE BY POSITION
operand1 TO
operand2
|
MOVE BY POSITION-Option:
Mit dieser Option können Sie Werte von Feldern einer Gruppe in Felder einer anderen Gruppe übertragen, und zwar unabhängig von den Namen der Felder. Die Werte werden Feld für Feld von einer Gruppe in die andere übertragen, und zwar in der Reihenfolge, in der die Felder definiert sind (Felder, die aus einer Redefinition resultieren, werden dabei nicht berücksichtigt). Die einzelnen Felder können jedes beliebige Format haben. Die Anzahl der Felder in beiden Gruppen muss gleich sein; auch die Level-Struktur und die Array-Dimensionen der Felder müssen einander entsprechen. Format-Umsetzungen erfolgen entsprechend der Regeln für arithmetische Operationen (siehe Arithmetische Operationen im Leitfaden zur Programmierung). Die beiden Operanden können auch Views sein. Siehe auch Beispiel 4 - MOVE BY POSITION. |
MOVE
EDITED
operand1
TO
operand2
|
|
(EM=value)
|
|
|
(EMU=value)
|
||||
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | A | U | B | ja | nein | ||||||||||||
operand2
|
S | A | A | U | N | P | I | F | B | D | T | L | ja | ja | ||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
MOVE EDITED
|
MOVE EDITED-Option - Übertragung mit
Editiermaske:
Ist für Die Editiermaske kann als eine Eingabe-Editiermaske für
Wenn die Editiermaske mehr Zeichen oder Ziffern enthält, als in
Unter der Voraussetzung, dass die Länge von
MOVE EDITED operand1 TO operand2 (EM=value) als Ausführung der folgenden Operation ansehen: STACK TOP DATA operand1 INPUT operand2 (EM=value) Siehe auch Beispiel 1 - Verschiedene Beispiele für die Benutzung des MOVE-Statements. Wenn der Inhalt von Siehe Beispiel 6 – MOVE EDITED mit Editiermaske und Extra-Zeichen . Alternativ kann ein Fragezeichen (?) als Platzhalterzeichen verwendet werden, um diese zusätzlichen Zeichen zu ignorieren. Siehe Beispiel 7 – MOVE EDITED mit Editiermaske und Platzhalterzeichen '?'. |
EM
|
Editiermaske:
Einzelheiten zu Editiermasken finden Sie unter dem Session-Parameter |
EMU
|
Unicode-Editiermaske:
Einzelheiten zu Editiermasken finden Sie unter dem Session-Parameter |
MOVE
EDITED
operand1
|
|
(EM=value)
|
|
TO
operand2 |
|
(EMU=value)
|
|||||
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | N | A | U | N | P | I | F | B | D | T | L | ja | nein | ||||
operand2
|
S | A | A | U | B | ja | ja | |||||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
MOVE EDITED
|
MOVE EDITED-Option - Übertragung mit
Editiermaske:
Ist für Die Editiermaske kann als eine Ausgabe-Editiermaske für
Wenn die Editiermaske mehr Zeichen oder Ziffern referenziert, als in
Unter der Voraussetzung, dass die Länge von
MOVE EDITED operand1 (EM=value) TO operand2 als eine Operation WRITE operand1 (EM=value) betrachten, bei der die Ausgabe nicht auf den Schirm erfolgt, sondern in die
Variable Siehe auch Beispiel 1 - Verschiedene Beispiele für die Benutzung des MOVE-Statements. |
EM
|
Editiermaske:
Einzelheiten zu Editiermasken finden Sie unter dem Session-Parameter |
EMU
|
Unicode-Editiermaske:
Einzelheiten zu Editiermasken finden Sie unter dem Session-Parameter |
MOVE
|
|
LEFT
|
|
[JUSTIFIED]
operand1
[(parameter)]
TO
operand2
|
RIGHT
|
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | N | A | U | N | P | I | F | B | D | T | L | ja | nein | ||||
operand2
|
S | A | A | U | ja | ja | ||||||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
MOVE LEFT / RIGHT
JUSTIFIED
|
Ausrichtung:
Mit dieser Option können Sie festlegen, ob der übertragene Wert in
|
MOVE LEFT JUSTIFIED |
Linksbündig:
Bei |
MOVE RIGHT JUSTIFIED |
Rechtsbündig:
Bei Siehe auch Beispiel 1 - Verschiedene Beispiele für die Benutzung des MOVE-Statements. |
parameter
|
Parameter für invertierte Anzeigerichtung:
Wenn Sie
|
Das Statement MOVE NORMALIZED konvertiert eine Unicode-Zeichenkette in die
"Unicode Normalization Form C" (NFC). Die sich daraus ergebende
Unicode-Zeichenkette enthält keine Kombinationssequenzen für Zeichen mehr, die als
vordefinierte Zeichen zur Verfügung stehen.
Wenn das Format des Zieloperanden selbst kein Unicode ist, findet eine implizite
Konvertierung von Unicode in das Codepage-Format des Zieloperanden statt. Während dieser
Konvertierung wird die Standard-Codepage (siehe Systemvariable *CODEPAGE)
benutzt.
Weitere Informationen siehe Unicode- und Codepage-Unterstützung in der
Natural-Programmiersprache, Abschnitt Natural-Statements, Unterabschnitt MOVE
NORMALIZED in der Unicode- und
Codepage-Unterstützung-Dokumentation.
Syntax-Diagramm:
MOVE
NORMALIZED
operand1
TO
operand2
|
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | U | ja | nein | ||||||||||||||
operand2
|
S | A | A | U | ja | ja | ||||||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
MOVE NORMALIZED |
MOVE NORMALIZED-Option:
Diese Option dient zum Konvertieren von Unicode-Feldern mit potenziell nicht normalisiertem Inhalt in die "Unicode Normalization Form C" (NFC). Diese zusammengesetzte Form einer Unicode-Zeichenkette enthält keine Kombinationssequenzen für Zeichen, die als vordefinierte Zeichen zur Verfügung stehen. Siehe auch http://www.unicode.org/reports/tr15/#Canonical_Composition_Examples (Normalization Forms D and C Examples). Beispiel: MOVE NORMALIZED #SCR TO #TGT |
operand1
|
Quelloperand:
Der Quelloperand |
operand2
|
Zieloperand:
Der Zieloperand |
Beispiel:
Einige Codepunkte haben unterschiedliche Darstellungen in Unicode. Zum Beispiel der
deutsche Buchstabe Ä: die getrennte Darstellung im Unicode ist
U+0041, gefolgt von U+0308, bei der ein zusammengesetztes
Zeichen (U+0308) benutzt wird; eine andere Darstellung ist das vorher
zusammengesetzte Zeichen U+00C4. Das Statement MOVE NORMALIZED
wandelt die Unicode-Darstellung mit zusammengesetzten Zeichen in eine standardisierte
Unicode-Darstellung mittels vorher zusammengesetzter Zeichen, wo immer dies möglich
ist.
Dieser Abschnitt erläutert die Syntax des Statements MOVE ENCODED.
Weitere Informationen siehe Unicode- und Codepage-Unterstützung in der
Natural-Programmiersprache, Abschnitt Natural-Statements, Unterabschnitt MOVE
ENCODED in der Unicode- und
Codepage-Unterstützung-Dokumentation.
Syntax-Diagramm:
MOVE
ENCODED
|
operand1 [[IN] CODEPAGE
operand2] TO |
operand3 [[IN] CODEPAGE
operand4]
|
[GIVING
operand5]
|
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | A | U | B | ja | nein | ||||||||||||
operand2
|
S | A | U | ja | nein | |||||||||||||||
operand3
|
S | A | U | B | ja | ja | ||||||||||||||
operand4
|
S | A | A | U | ja | nein | ||||||||||||||
operand5 |
S | I4 | ja | ja | ||||||||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
MOVE
ENCODED |
Codepage-Umsetzung:
Die Option Anmerkung |
operand1
|
Umzusetzende Zeichenkette:
Der Quelloperand |
CODEPAGE
operand2
|
Codepage der umzusetzenden Zeichenkette:
In Kann nur angegeben werden, wenn
|
TO
operand3
|
Umgesetzte Zeichenkette:
In den Zieloperanden Wenn das Ergebnis der Umsetzung nicht in den Zieloperanden
( Wenn das Zielfeld als eine dynamische Variable definiert wird, ist kein Auffüllen oder Abschneiden erforderlich, da sich die Länge der dynamischen Variablen automatisch an die Länge des Ergebnisses der Konvertierung anpasst. |
CODEPAGE
operand4
|
Codepage der umgesetzten Zeichenkette:
In Die Codepage von |
GIVING
operand5 |
GIVING-Klausel:
Ohne das Schlüsselwort Wenn Sie das Schlüsselwort Wenn der Zieloperand abgeschnitten wird, wird keine Natural-Fehlermeldung
ausgegeben, aber wenn das Schlüsselwort |
Anmerkungen:
*CODEPAGE)
benutzt.
CPCVERR in dem Statement SET GLOBALS oder in dem Systemkommando
GLOBALS
auf ON gesetzt ist, wird ein Fehler ausgegeben, wenn mindestens ein Zeichen
des Ausgangsfeldes nicht ordnungsgemäß in die Ziel-Codepage umgesetzt werden konnte,
sondern im Zielfeld durch ein Ersetzungszeichen ersetzt wurde.
NTCPAGE im Quellmodul NATCONFG definierte Codepage-Namen können benutzt werden.
Andere Codepage-Namen werden mit einem entsprechenden Laufzeitfehler
zurückgewiesen.
MOVE ENCODED A-FIELD1 TO A-FIELD2
Ungültig: Dies führt zu einem Syntaxfehler, da die Codepage-Namen standardmäßig
übernommen werden und für operand1 und
operand3 identisch sind.
MOVE ENCODED A-FIELD1 CODEPAGE 'IBM01140' TO A-FIELD2 CODEPAGE 'IBM01140'
Ungültig: Dies führt zu einem Fehler, da die kodierten Codepage-Namen für
operand1 und
operand3 identisch sind.
MOVE ENCODED A-FIELD1 CODEPAGE 'IBM01140' TO A-FIELD2 CODEPAGE 'IBM037'
Gültig: Die Zeichenkette in A-FIELD1 (kodiert in IBM01140) wird
in A-FIELD2 (kodiert in IBM037) konvertiert.
MOVE ENCODED U-FIELD TO U-FIELD
Ungültig: Dies führt zu einem Fehler, da mindestens ein Operand vom Format A oder B sein muss.
MOVE ENCODED U-FIELD TO A-FIELD
Gültig: Die Unicode-Zeichenkette in U-FIELD wird angesichts der Tatsache,
dass sie in UTF-16 kodiert ist, in das alphanumerische A-FIELD in der
Standard-Codepage (*CODEPAGE) konvertiert.
MOVE ENCODED A-FIELD TO U-FIELD
Gültig: Die Zeichenkette in A-FIELD wird angesichts der Tatsache, dass sie
in der Standard-Codepage (*CODEPAGE) kodiert ist, in das Unicode-Feld
U-FIELD konvertiert.
MOVE ENCODED A100-FIELD CODEPAGE 'IBM1140' TO A50-FIELD CODEPAGE 'IBM037'
Gültig: Die Konvertierung erfolgt mittels der betreffenden Codepages von
A100-FIELD (Format/Länge: A100) in A50-FIELD
(Format/Länge: A50). Der Zieloperand wird abgeschnitten. Keine
Natural-Fehlermeldung wird zurückgegeben.
MOVE ENCODED A100-FIELD CODEPAGE 'IBM1140' TO A50-FIELD CODEPAGE 'IBM037' GIVING RC-FIELD
Gültig: Die Konvertierung erfolgt mittels der betreffenden Codepages von
A100-FIELD (Format/Länge: A100) in A50-FIELD
(Format/Länge: A50). Das Ziel wird abgeschnitten. Da eine
GIVING-Klausel angegeben wird, erhält das RC-FIELD einen
Fehlercode, der darauf hinweist, dass in diesem Fall Werte abgeschnitten wurden.
Das Statement MOVE ALL ermöglicht es, den Wert von
operand1 so oft nach
operand2 zu übertragen, bis das Zielfeld voll
oder bis der UNTIL-Wert (operand7)
erreicht ist.
Mit einer SUBSTRING-Klausel können Sie die MOVE
ALL-Operation auf Segmente des Ausgangs- und des Zielfelds begrenzen.
Syntax-Diagram:
MOVE ALL
|
|
|
|
TO |
|
|
|
[UNTIL
operand7]
|
Anmerkung
Die UNTIL-Option ist nicht erlaubt, wenn eine
SUBSTRING-Klausel für den Zieloperanden verwendet wird.
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | A | U | N1 | B | yes | no | |||||||||||
operand2
|
S | A | A | U | B | yes | yes | |||||||||||||
operand3
|
C | S | N | P | I | B2 | yes | no | ||||||||||||
operand4
|
C | S | N | P | I | B2 | yes | no | ||||||||||||
operand5
|
C | S | N | P | I | B2 | yes | no | ||||||||||||
operand6
|
C | S | N | P | I | B2 | yes | no | ||||||||||||
operand7
|
C | S | N | P | I | yes | no | |||||||||||||
1 Ein numerisches Format (N) für A
operand1 ist nur dann erlaubt, wenn die
SUBSTRING-Klausel nicht benutzt wird.
2 Wenn
operand3/operand5
oder
operand4/operand6
eine binäre Variable ist, kann sie nur mit einer Länge von kleiner als oder gleich 4
benutzt werden.
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
operand1
|
Ausgangsoperand:
Dieser Operand enthält den zu übertragenden Wert. Bei einem numerischen Operanden werden alle Stellen einschließlich vorangestellter Nullen übertragen. |
TO
operand2
|
Zieloperand:
In diesen Operanden wird der Wert übertragen. Der vorherige Inhalt des
Operanden wird vor der |
UNTIL
operand3
|
UNTIL-Option:
Mit der Übersteigt die Länge von Die Option Allgemeine Informationen zu dynamischen Variablen finden Sie im Abschnitt Benutzung dynamischer Variablen.. Anmerkung |
SUBSTRING |
SUBSTR-Klausel:
Mit der
Wenn die Wenn die
Siehe auch Beispiele für die Verwendung der SUBSTRING-Klausel weiter unten. |
DEFINE DATA LOCAL 1 ALFA (A10) INIT <'AAAAAAAAAA'> 1 DYN (A) DYNAMIC INIT <'1234567890'> 1 #VAL (A4) INIT <'1234'> END-DEFINE
|
Statement
|
Ergebnis
|
|
|
Vorher
|
Nachher
|
|
MOVE ALL SUBSTR(#VAL,1,2) TO ALFA |
AAAAAAAAAA |
1212121212 |
MOVE ALL '123' TO SUBSTR (ALFA,3,5) |
AAAAAAAAAA |
AA12312AAA |
MOVE ALL 'x' TO SUBSTR (DYN,7,3) |
1234567890
(*LENGTH=10)
|
123456xxx0
(*LENGTH=10)
|
MOVE ALL 'xyz' TO SUBSTR (DYN,7,6) |
1234567890
(*LENGTH=10)
|
123456xyzxyz
(*LENGTH=12)
|
MOVE ALL 'xyz' TO SUBSTR (DYN,11,4) |
1234567890
(*LENGTH=10)
|
1234567890xyzx
(*LENGTH=14)
|
Beispiel 1 - Verschiedene Beispiele für die Benutzung des MOVE-Statements
Beispiel 7 – MOVE EDITED mit Editiermaske und Platzhalterzeichen '?'
** Example 'MOVEX1': MOVE ************************************************************************ DEFINE DATA LOCAL 1 #A (N3) 1 #B (A5) 1 #C (A2) 1 #D (A7) 1 #E (N1.0) 1 #F (A5) 1 #G (N3.2) 1 #H (A6) END-DEFINE * MOVE 5 TO #A WRITE NOTITLE 'MOVE 5 TO #A' 30X '=' #A * MOVE 'ABCDE' TO #B #C #D WRITE 'MOVE ABCDE TO #B #C #D' 20X '=' #B '=' #C '=' #D * MOVE -1 TO #E WRITE 'MOVE -1 TO #E' 28X '=' #E * MOVE ROUNDED 1.995 TO #E WRITE 'MOVE ROUNDED 1.995 TO #E' 18X '=' #E * * MOVE RIGHT JUSTIFIED 'ABC' TO #F WRITE 'MOVE RIGHT JUSTIFIED ''ABC'' TO #F' 10X '=' #F * MOVE EDITED '003.45' TO #G (EM=999.99) WRITE 'MOVE EDITED ''003.45'' TO #G (EM=999.99)' 4X '=' #G * MOVE EDITED 123.45 (EM=999.99) TO #H WRITE 'MOVE EDITED 123.45 (EM=999.99) TO #H' 6X '=' #H * END
Ausgabe des Programms MOVEX1:
MOVE 5 TO #A #A: 5 MOVE ABCDE TO #B #C #D #B: ABCDE #C: AB #D: ABCDE MOVE -1 TO #E #E: -1 MOVE ROUNDED 1.995 TO #E #E: 2 MOVE RIGHT JUSTIFIED 'ABC' TO #F #F: ABC MOVE EDITED '003.45' TO #G (EM=999.99) #G: 3.45 MOVE EDITED 123.45 (EM=999.99) TO #H #H: 123.45
** Example 'MOVEX2': MOVE BY NAME
************************************************************************
DEFINE DATA LOCAL
1 #SBLOCK
2 #FIELDA (A10) INIT <'AAAAAAAAAA'>
2 #FIELDB (A10) INIT <'BBBBBBBBBB'>
2 #FIELDC (A10) INIT <'CCCCCCCCCC'>
2 #FIELDD (A10) INIT <'DDDDDDDDDD'>
1 #TBLOCK
2 #FIELD1 (A15) INIT <' '>
2 #FIELDA (A10) INIT <' '>
2 #FIELD2 (A10) INIT <' '>
2 #FIELDB (A10) INIT <' '>
2 #FIELD3 (A20) INIT <' '>
2 #FIELDC (A10) INIT <' '>
END-DEFINE
*
MOVE BY NAME #SBLOCK TO #TBLOCK
*
WRITE NOTITLE 'CONTENTS OF #TBLOCK AFTER MOVE BY NAME:'
// '=' #TBLOCK.#FIELD1
/ '=' #TBLOCK.#FIELDA
/ '=' #TBLOCK.#FIELD2
/ '=' #TBLOCK.#FIELDB
/ '=' #TBLOCK.#FIELD3
/ '=' #TBLOCK.#FIELDC
*
END
Inhalt von #TBLOCK nach der MOVE BY NAME-Verarbeitung:
CONTENTS OF #TBLOCK AFTER MOVE BY NAME:
#FIELD1:
#FIELDA: AAAAAAAAAA
#FIELD2:
#FIELDB: BBBBBBBBBB
#FIELD3:
#FIELDC: CCCCCCCCCC
DEFINE DATA LOCAL
1 #GROUP1
2 #FIELD (A10/1:10)
1 #GROUP2
2 #FIELD (A10/1:10)
END-DEFINE
...
MOVE BY NAME #GROUP1 TO #GROUP2
...
In diesem Beispiel würde das MOVE-Statement intern wie folgt
aufgelöst:
MOVE #GROUP1.#FIELD (*) TO #GROUP2.#FIELD (*)
Wenn ein Teil einer indizierten Gruppe in einen anderen Teil derselben Gruppe übertragen wird, kann dies zu unerwarteten Ergebnissen führen, wie im folgenden Beispiel veranschaulicht.
DEFINE DATA LOCAL
1 #GROUP1 (1:5)
2 #FIELDA (N1) INIT <1,2,3,4,5>
2 REDEFINE #FIELDA
3 #FIELDB (N1)
END-DEFINE
...
MOVE BY NAME #GROUP1 (2:4) TO #GROUP1 (1:3)
...
In diesem Beispiel würde das MOVE-Statement intern wie folgt
aufgelöst:
MOVE #FIELDA (2:4) TO #FIELDA (1:3) MOVE #FIELDB (2:4) TO #FIELDB (1:3)
Zunächst wird der Inhalt der Ausprägungen 2 bis 4 von #FIELDA in die
Ausprägungen 1 bis 3 von #FIELDA übertragen; d.h. die Ausprägungen erhalten
folgende Werte:
| Ausprägung: | 1. | 2. | 3. | 4. | 5. |
| Wert vorher: | 1 | 2 | 3 | 4 | 5 |
| Wert nachher: | 2 | 3 | 4 | 4 | 5 |
Dann wird der Inhalt der Ausprägungen 2 bis 4 von #FIELDB in die
Ausprägungen 1 bis 3 von #FIELDB übertragen; d.h. die Ausprägungen erhalten
folgende Werte:
| Ausprägung: | 1. | 2. | 3. | 4. | 5. |
| Wert vorher: | 2 | 3 | 4 | 4 | 5 |
| Wert nachher: | 3 | 4 | 4 | 4 | 5 |
DEFINE DATA LOCAL
1 #GROUP1
2 #FIELD1A (N5)
2 #FIELD1B (A3/1:3)
2 REDEFINE #FIELD1B
3 #FIELD1BR (A9)
1 #GROUP2
2 #FIELD2A (N5)
2 #FIELD2B (A3/1:3)
2 REDEFINE #FIELD2B
3 #FIELD2BR (A9)
END-DEFINE
...
MOVE BY POSITION #GROUP1 TO #GROUP2
...
In diesem Beispiel wird der Inhalt von #FIELD1A in #FIELD2A
übertragen, und der Inhalt von #FIELD1B in #FIELD2B; die
Felder #FIELD1BR und #FIELD2BR sind davon nicht betroffen.
** Example 'MOAEX1': MOVE ALL
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 CITY
1 VEH-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 4
RD. READ EMPLOY-VIEW BY NAME
SUSPEND IDENTICAL SUPPRESS
/*
FD. FIND VEH-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (RD.)
IF NO RECORDS FOUND
MOVE ALL '*' TO FIRST-NAME (RD.)
MOVE ALL '*' TO CITY (RD.)
MOVE ALL '*' TO MAKE (FD.)
END-NOREC
/*
DISPLAY NOTITLE (ES=OFF IS=ON ZP=ON AL=15)
NAME (RD.) FIRST-NAME (RD.)
CITY (RD.)
MAKE (FD.) (IS=OFF)
/*
END-FIND
END-READ
END
NAME FIRST-NAME CITY MAKE
--------------- --------------- --------------- ---------------
ABELLAN *************** *************** ***************
ACHIESON ROBERT DERBY FORD
ADAM *************** *************** ***************
ADKINSON JEFF BROOKLYN GENERAL MOTORS
** Example 'MOVEX3': MOVE EDITED with EM and extra characters
************************************************************************
DEFINE DATA LOCAL
1 #NUM (N3.2)
1 #A5 (A5)
1 #A8 (A8)
1 #A10 (A10)
1 #A12 (A12)
END-DEFINE
*
* MOVE EDITED operand1 (EM=value) TO operand2
*
* The Edit mask will be applied for operand1 and the result is moved
* to operand2. The created string is described by the edit mask
* where also extra characters can be included.
*
* This is similar to the statement 'WRITE operand (EM=value)'.
*
*
#NUM := 23.45
MOVE EDITED #NUM (EM=Z99.99+) TO #A8
WRITE 'MOVE 23.45 TO #NUM'
WRITE 'MOVE EDITED #NUM (EM=Z99.99+) TO #A8' 15X '=' #A8 /
*
* Show leading zero with filler 'x' defined as first character in EM.
*
#NUM := -78.15
MOVE EDITED #NUM (EM=xFULL-Z99.99) TO #A12
WRITE 'MOVE -78.15 TO #NUM'
WRITE 'MOVE EDITED #NUM (EM=xFULL-Z99.99) TO #A12' 9X '=' #A12 //
*
* Show leading blank with filler '.' defined as first character in EM.
* If extra character is equal to edit mask characters, then enclose
* it within apostrophes.
*
MOVE ' AB ' TO #A5
MOVE EDITED #A5 (EM=.GOXXXXXE'X'TRA) TO #A12
WRITE 'MOVE '' AB '' TO #A5'
WRITE 'MOVE EDITED #A5 (EM=.GOXXXXXE''X''TRA) TO #A12' 7X '=' #A12 /
*
* Similar handling for WRITE statement with edit mask.
*
WRITE 'WRITE #A5 (EM=.GOXXXXXNATURAL)' 21X '#A5: '
#A5 (EM=.GOXXXXXNATURAL) //
*
*
* MOVE EDITED operand1 TO operand2 (EM=value)
*
* The value of operand1 will be placed into operand2 using the
* edit mask. The edit mask specifies at which positions the contents
* of operand1 should be used for operand2.
* Extra characters in operand1 must be specified in the edit mask
* to be ignored (in operand2).
*
*
#A8 := '+12.40'
MOVE EDITED #A8 TO #NUM (EM=SZ9.99)
WRITE 'MOVE EDITED ''+12.40'' TO #NUM (EM=SZ9.99)' 6X '=' #NUM
*
* Ignore extra characters of operand1.
*
#A10:= '-12.40EUR'
MOVE EDITED #A10 TO #NUM (EM=-Z9.99EUR)
WRITE 'MOVE EDITED ''-12.40EUR'' TO #NUM (EM=-Z9.99EUR)' 3X '=' #NUM
*
* Use filler '*' for leading zero and define the filler as first
* character in EM.
*
#A10 := 'EUR*12.40-'
MOVE EDITED #A10 TO #NUM (EM=*EURZZ9.99-)
WRITE 'MOVE EDITED ''EUR*12.40-'' TO #NUM (EM=*EURZZ9.99-)'
'=' #NUM /
*
* Ignore extra characters of operand1 and, if needed, enclose them
* within apostrophes.
*
MOVE EDITED 'HE4711L-ALOX WO5R-7LD' TO
#A12 (EM=XX4711X-AXX'X'XXX5X-7XX)
WRITE 'MOVE EDITED ''HE4711L-ALOX WO5R-7LD'' TO'
'#A12 (EM=XX4711X-AXX''X''XXX5X-7XX)'
WRITE 51X '=' #A12 /
*
*
END
MOVE 23.45 TO #NUM
MOVE EDITED #NUM (EM=Z99.99+) TO #A8 #A8: 23.45+
MOVE -78.15 TO #NUM
MOVE EDITED #NUM (EM=xFULL-Z99.99) TO #A12 #A12: FULL-x78.15
MOVE ' AB ' TO #A5
MOVE EDITED #A5 (EM=.GOXXXXXE'X'TRA) TO #A12 #A12: GO..AB EXTRA
WRITE #A5 (EM=.GOXXXXXNATURAL) #A5: GO..AB NATURAL
MOVE EDITED '+12.40' TO #NUM (EM=SZ9.99) #NUM: 12.40
MOVE EDITED '-12.40EUR' TO #NUM (EM=-Z9.99EUR) #NUM: -12.40
MOVE EDITED 'EUR*12.40-' TO #NUM (EM=*EURZZ9.99-) #NUM: -12.40
MOVE EDITED 'HE4711L-ALOX WO5R-7LD' TO #A12 (EM=XX4711X-AXX'X'XXX5X-7XX)
#A12: HELLO WORLD
** Example 'MOVEX4': MOVE EDITED with EM and wildcard character '?'
************************************************************************
DEFINE DATA LOCAL
1 #NUM (N3.2)
1 #NUM2 (N5)
1 #A10 (A10)
1 #A14 (A14)
1 #B4 (B4)
1 #DATE (D)
1 #TIME (T)
END-DEFINE
*
* MOVE EDITED operand1 TO operand2 (EM=value)
*
* The value of operand1 will be placed into operand2 using the
* edit mask. The edit mask specifies at which positions the contents
* of operand1 should be used for operand2.
* Extra characters in operand1 must be specified in the edit mask
* to be ignored (in operand2).
* Or use the wildcard character '?' instead of any extra character
* which fits all values and much easier to define.
*
*
* Numeric edit mask with extra characters or wildcard character
*
#A10 := '-12.40EUR'
MOVE EDITED #A10 TO #NUM (EM=-Z9.99EUR)
WRITE 'MOVE EDITED ''-12.40EUR'' TO #NUM (EM=-Z9.99EUR)' 9X '=' #NUM
*
#A10 := '-12.40EUR'
MOVE EDITED #A10 TO #NUM (EM=-Z9.99???)
WRITE 'MOVE EDITED ''-12.40EUR'' TO #NUM (EM=-Z9.99???)' 9X '=' #NUM //
*
* Filler '*' is required if started with extra or wildcard character
*
#A10 := 'EUR*5.33-'
MOVE EDITED #A10 TO #NUM (EM=*EURZZ9.99-)
WRITE 'MOVE EDITED ''EUR*5.33-'' TO #NUM (EM=*EURZZ9.99-)' 8X
'=' #NUM
*
#A10 := 'EUR*5.33-'
MOVE EDITED #A10 TO #NUM (EM=*???ZZ9.99-)
WRITE 'MOVE EDITED ''EUR*5.33-'' TO #NUM (EM=*???ZZ9.99-)' 8X
'=' #NUM //
*
*
#A10 := 'ABC987CDEF'
MOVE EDITED #A10 TO #NUM2 (EM=*'ABC'999'CDEF')
WRITE 'MOVE EDITED ''ABC987CDEF'' TO #NUM2 (EM=*''ABC''999''CDEF'')' 2X
'=' #NUM2
*
#A10 := 'ABC987CDEF'
MOVE EDITED #A10 TO #NUM2 (EM=*???999????)
WRITE 'MOVE EDITED ''ABC987CDEF'' TO #NUM2 (EM=*???999????)' 6X
'=' #NUM2 //
*
*
* Alphanumeric edit mask with extra characters or wildcard character
*
MOVE EDITED 'NATURAL-VERSION-9.2' TO
#A10 (EM=XXXURAL-XXXXION-X.X)
WRITE 'MOVE EDITED ''NATURAL-VERSION-9.2'' TO '-
'#A10 (EM=XXXURAL-XXXXION-X.X)'
WRITE 56X '=' #A10
*
MOVE EDITED 'NATURAL-VERSION-9.2' TO
#A10 (EM=XXX?????XXXX????X?X)
WRITE 'MOVE EDITED ''NATURAL-VERSION-9.2'' TO '-
'#A10 (EM=XXX?????XXXX????X?X)'
WRITE 56X '=' #A10 /
*
* Filler '*' is required if started with extra or wildcard character
*
MOVE EDITED 'VENUS-SATURN-GALAXY 2050+' TO
#A14 (EM=*VEXUS-SXXXXN-GXXA'X'YXXXXXX)
WRITE 'MOVE EDITED ''VENUS-SATURN-GALAXY 2050+'' TO'
WRITE 3X '#A14 (EM=*VEXUS-SXXXXN-GXXA''X''YXXXXXX)'
15X '=' #A14
*
MOVE EDITED 'VENUS-SATURN-GALAXY 2050+' TO
#A14 (EM=*??X????XXXX???XX???XXXXXX)
WRITE 'MOVE EDITED ''VENUS-SATURN-GALAXY 2050+'' TO '
WRITE 3X '#A14 (EM=*??X????XXXX???XX???XXXXXX)'
17X '=' #A14
*
*
NEWPAGE
*
*
* Hexadecimal edit mask with extra characters or wildcard character
*
MOVE EDITED 'C1/C2 C3-C4' TO #B4 (EM=H/H' 'H-H)
WRITE 'MOVE EDITED ''C1/C2 C3-C4'' TO '-
'#B4 (EM=H/H'' ''H-H)' 8X '=' #B4
*
MOVE EDITED 'C1/C2 C3-C4' TO #B4 (EM=H?H?H?H)
WRITE 'MOVE EDITED ''C1/C2 C3-C4'' TO '-
'#B4 (EM=H?H?H?H)' 10X '=' #B4 //
*
* Date and time edit mask with extra characters or wildcard character
*
MOVE EDITED 'DATE-07/10/2026-CREATED' TO
#DATE (EM='DATE-'DD/MM/YYYY'-CREATED')
WRITE 'MOVE EDITED ''DATE-07/10/2026-CREATED'' TO '-
'#DATE (EM=''DATE-''DD/MM/YYYY''-CREATED'')'
WRITE '=' #DATE (EM=YYYY-LLL-DD)
6X '/* date shown with EM=(YYYY-LLL-DD)'/
*
MOVE EDITED 'DATE-07/10/2026-CREATED' TO
#DATE (EM=?????DD/MM/YYYY????????)
WRITE 'MOVE EDITED ''DATE-07/10/2026-CREATED'' TO '-
'#DATE (EM=?????DD/MM/YYYY????????)'
WRITE '=' #DATE (EM=YYYY-LLL-DD)
6X '/* date shown with EM=(YYYY-LLL-DD)'//
*
*
MOVE EDITED 'RUN-TIME-17.37.45' TO #TIME (EM='RUN-TIME-'HH.II.SS)
WRITE 'MOVE EDITED ''RUN-TIME-17.37.45'' TO '-
'#TIME (EM=''RUN-TIME-''HH.II.SS)'
WRITE '=' #TIME (EM=HH:II:SS)
9X '/* time shown with EM=(HH:II:SS)'/
*
MOVE EDITED 'RUN-TIME-17.37.45' TO #TIME (EM=?????????HH.II.SS)
WRITE 'MOVE EDITED ''RUN-TIME-17.37.45'' TO '-
'#TIME (EM=?????????HH.II.SS)'
WRITE '=' #TIME (EM=HH:II:SS)
9X '/* time shown with EM=(HH:II:SS)'//
*
*
END
MOVE EDITED '-12.40EUR' TO #NUM (EM=-Z9.99EUR) #NUM: -12.40
MOVE EDITED '-12.40EUR' TO #NUM (EM=-Z9.99???) #NUM: -12.40
MOVE EDITED 'EUR*5.33-' TO #NUM (EM=*EURZZ9.99-) #NUM: -5.33
MOVE EDITED 'EUR*5.33-' TO #NUM (EM=*???ZZ9.99-) #NUM: -5.33
MOVE EDITED 'ABC987CDEF' TO #NUM2 (EM=*'ABC'999'CDEF') #NUM2: 987
MOVE EDITED 'ABC987CDEF' TO #NUM2 (EM=*???999????) #NUM2: 987
MOVE EDITED 'NATURAL-VERSION-9.2' TO #A10 (EM=XXXURAL-XXXXION-X.X)
#A10: NATVERS92
MOVE EDITED 'NATURAL-VERSION-9.2' TO #A10 (EM=XXX?????XXXX????X?X)
#A10: NATVERS92
MOVE EDITED 'VENUS-SATURN-GALAXY 2050+' TO
#A14 (EM=*VEXUS-SXXXXN-GXXA'X'YXXXXXX) #A14: NATURAL 2050+
MOVE EDITED 'VENUS-SATURN-GALAXY 2050+' TO
#A14 (EM=*??X????XXXX???XX???XXXXXX) #A14: NATURAL 2050+
MOVE EDITED 'C1/C2 C3-C4' TO #B4 (EM=H/H' 'H-H) #B4: C1C2C3C4
MOVE EDITED 'C1/C2 C3-C4' TO #B4 (EM=H?H?H?H) #B4: C1C2C3C4
MOVE EDITED 'DATE-07/10/2026-CREATED' TO #DATE (EM='DATE-'DD/MM/YYYY'-CREATED')
#DATE: 2026-Oct-07 /* date shown with EM=(YYYY-LLL-DD)
MOVE EDITED 'DATE-07/10/2026-CREATED' TO #DATE (EM=?????DD/MM/YYYY????????)
#DATE: 2026-Oct-07 /* date shown with EM=(YYYY-LLL-DD)
MOVE EDITED 'RUN-TIME-17.37.45' TO #TIME (EM='RUN-TIME-'HH.II.SS)
#TIME: 17:37:45 /* time shown with EM=(HH:II:SS)
MOVE EDITED 'RUN-TIME-17.37.45' TO #TIME (EM=?????????HH.II.SS)
#TIME: 17:37:45 /* time shown with EM=(HH:II:SS)