Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

@COPY (Format 2) - Kopieren von Zeilen oder Zeichenfolgevariablen

&pagelevel(3)&pagelevel

Mit der Anweisung @COPY werden Datensätze der aktuellen oder einer anderen Arbeitsdatei oder Inhalte von Zeichenfolgevariablen in die aktuelle Arbeitsdatei kopiert.

Der Zeilenbereich der Quell-Arbeitsdatei, der die zu kopierenden 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 kopiert werden, wird als Empfangsbereich bezeichnet.

Operation

Operanden

F-Modus, L-Modus

@COPY

{ {lines [ (procnr) ] | svars } [TO { line1 [(inc)] [:] [line2] } [,...]] } [,...]

lines

Zusammenhängender Zeilenbereich, der in die aktuelle Arbeitsdatei kopiert
werden soll. Symbolische Zeilennummern in lines beziehen sich auf die
Zeilennummern der aktuellen Arbeitsdatei, auch wenn die Zeilen aus einer
anderen Arbeitsdatei kopiert werden.

procnr

Nummer der Quell-Arbeitsdatei, aus der die Zeilen kopiert werden (0..22).
Ist procnr nicht angegeben, werden die Zeilen aus der aktuellen Arbeitsdatei
kopiert. Eine aktive Arbeitsdatei darf nicht angegeben werden.
Wird kein TO Operand angegeben, darf procnr nicht die aktuelle Arbeitsdatei
sein.

svars

Bereich von Zeichenfolgevariablen, deren Inhalte in die aktuelle Arbeitsdatei
kopiert werden sollen.

TO...

Mit den auf TO folgenden Operanden werden der oder die Empfangsbereiche
definiert. Ist kein Empfangsbereich angegeben, dann werden die
Zeilennummern der Quell-Arbeitsdatei in die aktuelle Arbeitsdatei
übernommen.
Ist die Quell-Arbeitsdatei die aktuelle Arbeitsdatei oder werden
Zeichenfolgevariable kopiert, dann muss TO... angegeben werden. Ist in diesen
Fällen kein Empfangsbereich angegeben, dann wird die @COPY-Anweisung
mit der Fehlermeldung EDT3218 abgewiesen.

line1

Nummer der ersten Zeile des Empfangsbereiches.

inc

Schrittweite, aus der die auf line1 folgenden Zeilennummern gebildet
werden. Wird inc nicht angegeben, wird die implizit durch line1 gegebene
Schrittweite verwendet (siehe Abschnitt „Implizite Schrittweitenvergabe“).

:

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
der ein Kopieren von Datensätzen erlaubt wird.

Es findet somit kein Kopieren in Zeilen der aktuellen Arbeitsdatei statt,
deren Zeilennummer größer als line2 ist. Dies gilt auch dann, wenn dadurch
nicht alle Datensätze des Sendebereiches in den Empfangsbereich kopiert
werden können.
Ist line2 nicht angegeben, so wird durch die @COPY-Anweisung kein
Maximalwert für die Zeilennummern des Empfangsbereiches festgelegt.

Mit der @COPY-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.

Wenn sich der Sende- und der Empfangsbereich überlappen, wird der Sendebereich zeilenweise kopiert. Dies kann dazu führen, dass ein Datensatz zunächst in eine Zeile und anschließend wieder aus dieser Zeile kopiert wird, wenn diese sowohl im Sende- als auch im Empfangsbereich liegt. Auf diese Weise kann der Sendebereich bzw. Teile davon mehrfach in den Empfangsbereich kopiert werden.

Bereits in der aktuellen Arbeitsdatei existierende Zeilen mit gleichen Zeilennummern werden beim Kopieren ü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 Kopieren den Zeichensatz der Quell-Arbeitsdatei bzw. der ersten angegebenen Zeichenfolgevariablen. Hat die aktuelle Arbeitsdatei einen Zeichensatz, dann werden die zu kopierenden 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 @COPY-Anweisung abgewiesen 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

@COPY 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.

@COPY 2-3(1) TO 7,1-1(1)

eingeben, dann gibt es keine Mehrdeutigkeiten.

Beispiel 1


Mit den drei @COPY-Anweisungen sollen die Zeile 1 in die Zeile 7, die Zeile 2 in die Zeile 5 und der Zeilenbereich von Zeilennummer 1 bis 3 in den Zeilenbereich ab Zeile 30.1 mit der expliziten Schrittweite 5 kopiert werden.

Beispiel 2

Mit der @COPY-Anweisung können Zeilenbereiche vervielfacht werden, wenn sich Sende- und Empfangsbereich überlappen. Nachfolgend soll die erste Zeile vervielfacht werden.


Mit dieser Anweisung wird der Zeilenbereich von Zeilennummer 1 bis 2 in den Zeilenbereich ab Zeilennummer 1.5 mit der impliziten Schrittweite 0.1 kopiert.

Dabei kopiert der EDT zunächst die Zeile 1 in die Zeile 1.5. Diese Zeile liegt im angegebenen Sendebereich. Daher wird die Zeile 1.5 mit der impliziten Schrittweite 0.1 in die Zeile 1.6 kopiert. Entsprechend wird Zeile 1.6 in 1.7, ... , Zeile 1.9 in 2.0 (dabei wird der Inhalt der Zeile 2 überschrieben) und abschließend Zeile 2.0 in Zeile 2.1 kopiert.

Der Zeilenbereich 3 bis 5 soll in den Zeilenbereich von 4.1 bis 5 mit der impliziten Schrittweite 0.1 kopiert werden.

Dabei kopiert der EDT zunächst die Zeile 3 in die Zeile 4.1 und die Zeile 4 in die Zeile 4.2. Die beiden neu angelegten Zeilen liegen im angegebenen Sendebereich. Daher wird anschließend die Zeile 4.1 in die Zeile 4.3, die Zeile 4.2 in 4.4, ... , die Zeile 4.8 in 5.0 kopiert. Dabei wird der Inhalt der Zeile 5 überschrieben. Die Zeilen 4.9 und 5.0 werden nicht mehr kopiert, da die größtmögliche Zeilennummer des Empfangsbereiches bereits erreicht wurde.