Mit der Anweisung @MOVE werden Datensätze der aktuellen oder einer anderen Arbeitsdatei in die aktuelle Arbeitsdatei übertragen und anschließend an ihren ursprünglichen Positionen gelöscht oder Inhalte von Zeichenfolgevariablen in die aktuelle Arbeitsdatei übertragen und anschließend werden die Zeichenfolgevariablen reinitialisiert.
Der Zeilenbereich der Quell-Arbeitsdatei, der die zu übertragenden Datensätze enthält, bzw. der Bereich von Zeichenfolgevariablen wird der Einfachheit halber im Folgenden als Sendebereich bezeichnet. Der Zeilenbereich der aktuellen Arbeitsdatei, in den die Datensätze der Quell-Arbeitsdatei übertragen werden, wird als Empfangsbereich bezeichnet.
Operation | Operanden | F-Modus, L-Modus |
@MOVE | { { lines [(procnr)] | svars } [TO { line1 [(inc)] [:] [line2] } [,...] ] } [,...] |
lines | Zusammenhängender Zeilenbereich, der in die aktuelle Arbeitsdatei |
procnr | Nummer der Quell-Arbeitsdatei, aus der die Datensätze übertragen werden |
svars | Bereich von Zeichenfolgevariablen, deren Inhalte in die aktuelle Arbeitsdatei |
TO... | Mit den auf Ist die Quell-Arbeitsdatei die aktuelle Arbeitsdatei oder werden |
line1 | Nummer der ersten Zeile des Empfangsbereiches. |
inc | Schrittweite, aus der die auf |
: | Die Operanden line1 und line2 sollten durch : voneinander getrennt werden, falls inc nicht angegeben wird. |
line2 | Legt die größtmögliche Zeilennummer des Empfangsbereiches fest, bis zu Es findet somit keine Übertragung in Zeilen der aktuellen Arbeitsdatei statt, Ist |
Mit der @MOVE-Anweisung können mehrere Sendebereiche mit jeweils mehreren Empfangsbereichen durch Komma getrennt angegeben werden. Die Anzahl der Sende- und Empfangsbereiche ist nur durch die maximal erlaubte Länge einer EDT-Anweisung begrenzt. Die Angabe mehrerer Empfangsbereiche ist normalerweise nicht sinnvoll, weil die Zeilen bereits nach der ersten Übertragung im Sendebereich gelöscht werden und für weitere Übertragungen nicht mehr zur Verfügung stehen.
Wenn sich der Sende- und der Empfangsbereich überlappen, wird der Sendebereich zeilenweise übertragen und gelöscht.
Bereits in der aktuellen Arbeitsdatei existierende Zeilen mit gleichen Zeilennummern werden bei der Übertragung überschrieben.
Wenn eine Zeile angelegt wird, deren Nummer größer als die bisherige höchste Zeilennummer ist, wird die aktuelle Zeilennummer verändert.
Ist die aktuelle Arbeitsdatei leer und hat sie den Zeichensatz *NONE
, dann erhält sie beim Übertragen den Zeichensatz der Quell-Arbeitsdatei bzw. der ersten angegebenen Zeichenfolgevariablen.
Hat die aktuelle Arbeitsdatei einen Zeichensatz, dann werden die zu übertragenden Zeilen bzw. die Inhalte der Zeichenfolgevariablen in den Zeichensatz der aktuellen Arbeitsdatei konvertiert. Werden dabei Zeichen gefunden, die im Zeichensatz der Arbeitsdatei nicht darstellbar sind, werden diese durch ein Ersatzzeichen ersetzt, sofern ein solches spezifiziert ist (siehe @PAR SUBSTITUTION-CHARACTER), andernfalls wird die @MOVE-Anweisung abgebrochen und die Fehlermeldung EDT5453
ausgegeben.
Wird die Anweisung mit [K2] unterbrochen und der EDT-Lauf mit /INFORM-PROGRAM
fortgesetzt, so wird die Bearbeitung der Anweisung abgebrochen und die Meldung EDT5501
ausgegeben.
Hinweis
Da es die obige Syntax erlaubt, den TO
-Operanden wegzulassen, ist es nicht immer möglich, eindeutig zwischen einem Empfangsbereich und einem nächsten Sendebereich zu unterscheiden. In diesen Fällen entscheidet sich der EDT für die Interpretation als Empfangsbereich. So wird z.B. in der Eingabe
@MOVE 2-3(1) TO 7,1(1)
die Angabe 1(1)
als zweiter Empfangsbereich interpretiert (die 1
in Klammern wird als Schrittweite interpretiert), während die Angabe 1(0)
an dieser Stelle als nächster Sendebereich interpretiert worden wäre (die 0
kann keine Schrittweite sein und wird als Arbeitsdateinummer interpretiert). Will der Anwender in diesem Beispiel die Interpretation als Sendebereich erzwingen, könnte er z.B.
@MOVE 2-3(1) TO 7,1-1(1)
eingeben, dann gibt es keine Mehrdeutigkeiten.
Beispiel
Die Zeilen 2 bis 4 sollen in den Zeilenbereich ab Zeile 20 übertragen werden. Als Schrittweite des Empfangsbereiches ist implizit der Wert 1 angegeben.
Die Zeilen 20, 21 und 22 wurden mit der impliziten Schrittweite 1 neu angelegt und die Zeilen 2, 3 und 4 gelöscht.
Die Zeilen 20-22 sollen nach 100, 105 und 110 übertragen werden.
Der Zeilenbereich ab Zeile 100 bis Arbeitsdateiende (100-.$
) soll mit der expliziten Schrittweite 5 in den Zeilenbereich ab Zeile 82 übertragen werden. Da als größtmögliche Zeilennummer für den Empfangsbereich 89 festgelegt wurde, wird die Zeile 90 nicht überschrieben.
Die Zeile 110 wurde nicht übertragen, da als größtmögliche Zeilennummer für den Empfangsbereich 89 festgelegt wurde.