Anwendungsgebiet: PROCEDURE
Kommandobeschreibung
Mit dem Kommando SET-VARIABLE werden einfachen oder zusammengesetzten Variablen Werte zugewiesen.
Bei Zuweisung von einfachen Variablen oder Variablenelementen müssen die Datentypen sich entsprechen. Bei globaler Zuweisung von zusammengesetzen Variablen muss auch die Struktur der Variablen übereinstimmen.
Stehen auf beiden Seiten der Zuweisung zusammengesetzte Variablen, ist auf Folgendes zu achten:
Werden Variablenelemente überschrieben?
Wird die zusammengesetzte Variable erweitert?
Werden Variablenelemente der rechts stehenden Variablen ignoriert?
Bei der Zuweisung zusammengesetzter Variablen vom Typ Array ist zu beachten, dass die Reihenfolge, in der Inhalte von Array-Elementen anderen Elementen zugewiesen werden, bestimmt wird durch die Reihenfolge der Array-Elemente auf der rechten Seite der Zuweisung. Bei Listenvariablen kann Anfang und Ende eines Bereichs von Listenelementen vereinbart werden.
Bei der Kommandoeingabe reicht es aus, wenn statt
/SET-VARIABLE <variable1> = <variable2> / <text>
geschrieben wird
/<variable1> = <variable2> / <text>
Die Schreibweise ohne den Kommandonamen ist auch aus Performance-Gründen zu empfehlen (siehe "SDF-Syntaxanalyse ").
Hinweis
Die Operanden des Kommandos SET-VARIABLE werden nur von SDF-P ausgewertet und sind, wie nachfolgend dargestellt, einzugeben. Für die Operanden gelten die SDF-Abkürzungsregeln. SDF-Funktionen, wie Auskunft über mögliche Operandenwerte oder Korrekturdialog, sind auf Operandenebene nicht verfügbar. Im geführten Dialog stellt SDF nur ein Eingabefeld mit „# =“ zur Verfügung.
Format
SET-VARIABLE |
<composed-name11..255> = <text 0..1800 with-low expr> / <composed-name2 1..255> / *STRING-TO-VARIABLE(...) / *LIST(...) *STRING-TO-VARIABLE(...) STRING = <text 0..1800 with-low expr> *LIST(...) LIST-NAME = <composed-name 1..255> ,FROM-INDEX = *FIRST / *LAST / <integer 1..2147483647> |
Operandenbeschreibung
<composed-name1 1..255> =
Bezeichnet die Variable, der ein Wert oder Inhalt einer anderen Variablen zugewiesen wird. Die Variable <composed-name1> kann eine einfache oder zusammengesetzte Variable sein.
Einer einfachen Variablen wird ein Wert zugewiesen, der durch einen Ausdruck bestimmt wird. Der Ausdruck muss ein Ergebnis liefern, das dem Datentyp entspricht, mit dem die Variable deklariert wurde.
Die Regeln für die Zuweisung an zusammengesetzte Variablen sind in der Tabelle am Ende dieser Kommandobeschreibung zusammengefasst.
Ist die Variable über den Behälter-Mechanismus mit einer Jobvariablen verknüpft, muss das Ergebnis des Ausdrucks den entsprechenden Bedingungen genügen: Datentyp STRING, maximale Länge 255 Byte.
<composed-name1 1..255> = <text 0..1800 with-low expr>
Der Variablen composed-name1 wird ein Wert zugewiesen, der durch einen Ausdruck bestimmt wird.
<composed-name1 1..255> = <composed-name2 1..255>
Der Variablen composed-name1 wird der Inhalt der Variablen composed-name2 zugewiesen; composed-name2 ist eine einfache oder eine zusammengesetzte Variable. Ist composed-name1 ein Listenelement, muss dieses Element bereits vorhanden sein, es kann nicht implizit angelegt werden, auch dann nicht, wenn implizite Deklaration erlaubt ist. (Ausnahme: Mit /liste# = <wert> kann der Listenkopf angelegt werden.) Die Regeln für die Zuweisung von zusammengesetzten Variablen sind in der Tabelle am Ende dieser Operandenbeschreibung dargestellt.
<composed-name1 1..255> = *STRING-TO-VARIABLE(...)
Legt fest, dass ein String gemäß der Konvertierungsregeln (siehe Abschnitt „SDF-Kommando-Strings zu S-Variablen konvertieren und umgekehrt“ (SDF-Kommando-Strings zu S-Variablen konvertieren und umgekehrt )) in eine S-Variable vom Typ Struktur konvertiert wird.
STRING = <text 0..1800 with-low expr>
Eingabe-String, der in eine S-Variable konvertiert werden soll.
VALUE-TYPE =
Legt fest, ob der Eingabestring wertabhängig oder generell in den Typ String konvertiert werden soll. Siehe hierzu Konvertierungsregel 4 (SDF-Kommando-Strings zu S-Variablen konvertieren und umgekehrt ).
VALUE-TYPE = *STD
Der Eingabe-String wird wertabhängig (String/Integer/Boolean) konvertiert. Für leere oder aus Leerzeichen bestehende Listenelemente werden keine entsprechenden Elemente von Listenvariablen angelegt.
VALUE-TYPE = *STRING
Der Eingabe-String wird generell in Variable des Typs String konvertiert. Für leere oder aus Leerzeichen bestehende Listenelemente werden entsprechende Elemente von Listenvariablen angelegt.
<composed-name1 1..255> = *LIST(...)
Der Variablen <composed-name1> werden Elemente einer Listenvariablen zugewiesen. Je nach Anzahl zugewiesener Listenelemente muss <composed-name1> eine einfache oder zusammengesetzte Variable sein.
LIST-NAME = <composed-name 1..255>
Name der Listenvariablen.
FROM-INDEX = *FIRST / *LAST / <integer 1..2147483647>
Index des Elementes der Listenvariablen, mit dem beginnend eine spezifizierte Anzahl von Listenelementen der Variablen <composed-name1> zugewiesen werden.
*FIRST: Die Zuweisung beginnt mit dem ersten Element der Liste; Voreinstellung.
Die Angabe *LAST weist genau das letzte Element der Liste zu. Der Operand NUMBER-OF-ELEMENTS wird in diesem Fall ignoriert.
NUMBER-OF-ELEMENTS = 1 / *REST / <integer 1..2147483647>
Anzahl der Listenelemente, die zugewiesen werden. Voreinstellung: Ein Element wird zugewiesen.
Die Angabe *REST weist alle Elemente vom angegebenen Startelement (Operand FROM-INDEX) bis zum letzten Element der Liste zu.
WRITE-MODE =
Legt fest, wohin der neue Variableninhalt bei der Zuweisung gebracht wird.
Die Tabelle am Ende dieser Operandenbeschreibung zeigt, welche Variablen und Werte bei der Zuweisung mit den Operandenwerten von WRITE-MODE = kombiniert werden können.
WRITE-MODE = *REPLACE
Der Variablenname auf der linken Seite der Zuweisung muss eine einfache oder zusammengesetzte Variable bezeichnen.
Die Variable bzw. die Elemente der zusammengesetzten Variablen müssen überschreibbar sein. (Eine Variable ist in der Regel nur dann nicht überschreibbar, wenn sie als Behälter eine Jobvariable mit Schreibschutzkennwort besitzt und das Kennwort nicht in der aktuellen Kennwortliste enthalten ist.)
Der Inhalt der Variablen, die links vom Gleichheitszeichen steht, wird implizit mit FREE-VARIABLE gelöscht; anschließend wird die Variable mit dem Wert, der sich aus der Angabe rechts vom Gleichheitszeichen ergibt, überschrieben.
Arrays
Auf beiden Seiten des Gleichheitszeichens muss ein Array stehen.
Die Elemente des links stehenden Arrays werden von den Elementen des rechts stehenden der Reihe nach überschrieben. Enthält der rechts stehende Array mehr Elemente, wird der links stehende erweitert. Enthält der rechts stehende Array weniger Elemente, werden die überzähligen Elemente des links stehenden Arrays gelöscht (implizites FREE-VARIABLE).
Listen
Auf beiden Seiten des Gleichheitszeichens muss eine Liste stehen.
Die Elemente der links stehenden Listen werden von den Elementen der rechts stehenden der Reihe nach überschrieben. Enthält die rechts stehende Liste mehr Elemente, wird die links stehende erweitert. Enthält die rechts stehende Liste weniger Elemente, werden die überzähligen Elemente der links stehenden Liste gelöscht (implizites FREE-VARIABLE).
Strukturen
Auf beiden Seiten des Gleichheitszeichens muss eine Struktur angegeben sein.
Zuweisung an eine statische Struktur: Elemente der links stehenden Struktur werden mit den Inhalten der Elemente auf der rechten Seite des Gleichheitszeichens überschrieben, wenn die Elemente den gleichen Elementnamen haben. Enthält die rechts stehende Struktur Elemente, für die es kein „Pendant“ in der links stehenden Struktur gibt, werden diese Elemente ignoriert.
Zuweisung an eine dynamische Struktur: Implizit werden alle Elemente der rechts stehenden Struktur als Elemente der links stehenden Struktur deklariert.
WRITE-MODE = *MERGE
Der Variablenname auf der linken Seite der Zuweisung muss eine zusammengesetzte Variable vom Typ Array oder Struktur bezeichnen.
Der zusammengesetzten Variablen links vom Gleichheitszeichen wird der Inhalt der rechts stehenden zusammengesetzten Variablen zugewiesen.
Falls die zusammengesetzten Variablen links und rechts vom Gleichheitszeichen identisch sind, ist die Wirkung von WRITE-MODE = *MERGE gleich der von WRITE-MODE = *REPLACE.
Arrays
Auf beiden Seiten des Gleichheitszeichens muss ein Array stehen. Wenn die beteiligten Arrays Elemente mit dem gleichen Arrayindex enthalten, gilt:
Dem Element des links stehenden Arrays wird der Inhalt des rechts stehenden Arrayelements zugewiesen, das den gleichen Arrayindex hat. Arrayelemente, für die es auf der linken Seite der Zuweisung kein „Pendant“ mit gleichem Arrayindex gibt, werden angelegt.
Strukturen
Auf beiden Seiten des Gleichheitszeichens muss eine Struktur angegeben sein.
Zuweisung an eine statische Struktur: Elemente der links stehenden Struktur werden mit den Inhalten der Elemente auf der rechten Seite des Gleichheitszeichens überschrieben, wenn die Elemente den gleichen Elementnamen haben. Enthält die rechts stehende Struktur Elemente, für die es kein „Pendant“ in der links stehenden Struktur gibt, werden diese Elemente ignoriert. Enthält die links stehende Struktur Elemente, für die es kein „Pendant“ in der rechts stehenden Struktur gibt, dann bleiben diese Elemente unbeeinflusst.
Zuweisung an eine dynamische Struktur: Implizit werden alle Elemente der rechts stehenden Struktur als Elemente der links stehenden Struktur deklariert.
WRITE-MODE = *EXTEND
Nur für Variablen vom Typ *Liste.
Die rechte Seite der Zuweisung muss ein Ausdruck sein oder eine zusammengesetzte Variable vom Typ Liste bezeichnen.
Die Liste auf der linken Seite der Zuweisung wird erweitert:
Enthält die Zuweisung auf der rechten Seite einen Ausdruck, so wird die Liste um ein Element erweitert; diesem Element wird das Ergebnis des Ausdrucks zugewiesen.
Enthält die Zuweisung auf der rechten Seite den Variablennamen einer Liste, so wird diese Liste (rechts) an die Liste (links) angehängt: die ursprüngliche Liste wird um die entsprechende Anzahl Elemente erweitert; diesen Elementen wird der Reihe nach der Inhalt der Elemente der rechts stehenden Liste zugewiesen.
WRITE-MODE = *PREFIX
Nur für Variablen vom Typ *Liste.
Die rechte Seite der Zuweisung muss ein Ausdruck sein oder eine zusammengesetzte Variable vom Typ Liste bezeichnen.
Die Liste auf der linken Seite der Zuweisung wird erweitert:
Enthält die Zuweisung auf der rechten Seite einen Ausdruck, wird vor das bisher erste Element der Liste ein neues Element eingefügt; diesem Element wird das Ergebnis des Ausdrucks zugewiesen.
Enthält die Zuweisung auf der rechten Seite den Variablennamen einer Liste, wird diese (rechte) Liste in die (linke) Liste eingefügt, vor das bisher erste Element. Die (linke) Liste wird nach vorn um so viele Elemente erweitert, wie die (rechte) Liste enthält. Diesen neuen Elementen wird der Reihe nach der Inhalt der Elemente der rechts stehenden Liste zugewiesen.
Kommando-Returncode
Während der Zuweisung von Strukturen, Arrays oder Listen ist es möglich, dass ein Teil des Kommandos abgearbeitet und ausgeführt wurde, bevor ein Fehler auftrat. In diesem Fall ist das Resultat des Kommandos nicht garantiert.
(SC2) | SC1 | Maincode | Bedeutung |
0 | CMD0001 | Ohne Fehler | |
1 | CMD0202 | Syntaxfehler | |
1 | SDP0118 | Kommando im falschen Kontext | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
64 | SDP0091 | Semantikfehler garantierte Meldung: SDP1030 | |
130 | SDP0099 | Kein Adressraum mehr verfügbar |
Zulässige Kombinationen von Variablentypen und Operanden
Variable (links) | Wert/Variable (rechts) | WRITE-MODE = | |||
*REPLACE | *MERGE | *EXTEND | *PREFIX | ||
einfache | Ausdruck | x | - | - | - |
Array | Ausdruck | - | - | - | - |
Liste | Ausdruck | - | - | x | x |
Struktur | Ausdruck | - | - | - | - |
Legende
x
Kombination zulässig, Auswirkung siehe Beschreibung des jeweiligen Operanden
Kombination führt zum Fehler
Beispiel
/SET-VARIABLE A = B /A = B
Beide Zuweisungen sind gleichwertig: Der Variablen A wird der Inhalt der Variablen B zugewiesen.
/SET-VARIABLE PERSON = 'HUGO' /PERSON = 'HUGO'
In beiden Zuweisungen wird der Variablen PERSON der String 'HUGO' zugewiesen.
/DECLARE-VARIABLE SUMME /SET-VARIABLE SUMME = -(1 + 3) * 4 /SUMME = -(1 + 3) * 4
Mit DECLARE-VARIABLE wird eine Variable SUMME deklariert, standardmäßig mit dem Datentyp ANY. Die beiden folgenden Zuweisungen sind gleichwertig: der Variablen
SUMME wird der Integer-Wert -16 zugewiesen.
Beispiel: Arrays
/DECLARE-VARIABLE A, MULTIPLE-ELEMENTS = *ARRAY /DECLARE-VARIABLE B, MULTIPLE-ELEMENTS = *ARRAY /SET-VARIABLE A#1 = 5 /SET-VARIABLE A#3 = 3 /SET-VARIABLE B#5 = 1 /SET-VARIABLE B = A /SHOW-VARIABLE B
Ausgabe
B#1 = 5 B#3 = 3
Variante
/SET-VARIABLE A#4 = 5 /SET-VARIABLE B#5 = 1 /SET-VARIABLE A#6 = 3 /SET-VARIABLE B = A, WRITE-MODE = *MERGE /SHOW-VARIABLE B
Ausgabe
B#4 = 5 B#5 = 1 B#6 = 3
Beispiel: Strukturen
/DECLARE-VARIABLE S1(TYPE = *STRUCTURE(*BY-SYSCMD)) / BEGIN-STRUCTURE / DECLARE-ELEMENT X(INITIAL-VALUE = 11) / DECLARE-ELEMENT Y(INITIAL-VALUE = 12) / DECLARE-ELEMENT Z(INITIAL-VALUE = 13) / END-STRUCTURE /DECLARE-VARIABLE S2(TYPE = *STRUCTURE(*DYNAMIC)) / DECLARE-ELEMENT S2.X('AB') / DECLARE-ELEMENT S2.Y('CD') / SET-VARIABLE S1 = S2 /SHOW-VARIABLE S1, SELECT=*BY-ATTRIBUTES(INITIALIZATION=*ANY)
Ausgabe
S1.X = AB S1.Y = CD S1.Z = *NO-INIT
Variante
/DECLARE-VARIABLE S1(TYPE = *STRUCTURE(*BY-SYSCMD)) / BEGIN-STRUCTURE / DECLARE-ELEMENT X(INIT = 11) / DECLARE-ELEMENT Y(INIT = 12) / DECLARE-ELEMENT Z(INIT = 13) / END-STRUCTURE /DECLARE-VARIABLE S2(TYPE = *STRUCTURE(*DYNAMIC)) / DECLARE-ELEMENT S2.X('AB') / DECLARE-ELEMENT S2.Y('CD') / SET-VARIABLE S2 = S1 /SHOW-VARIABLE S2
Ausgabe
S2.X = 11 S2.Y = 12 S2.Z = 13
Beispiel: Listen von Strukturen verwalten
Das folgende Beipiel zeigt, wie Listen von Strukturen verwaltet werden können: Es wird eine Liste von Strukturen erzeugt, die für jeden Benutzer den Namen und die Telefonnummer enthält. Wenn die Liste vollständig ist, wird sie in eine Datei kopiert.
/BEGIN-STRUCTURE MYLAYOUT / DECLARE-ELEMENT NAME(TYPE=*STRING) / DECLARE-ELEMENT TELEFONNUMMER(TYPE=*STRING) /END-STRUCTURE /DECLARE-VARIABLE LIST-OF-STRUCT(TYPE=*STRUCTURE(MYLAYOUT))/ ,MULTIPLE-ELEMENTS=*LIST /DECLARE-VARIABLE STRUCT(TYPE=*STRUCTURE(MYLAYOUT)) /READ-VARIABLE VARIABLE-NAME = STRUCT.NAME,INPUT=*TERMINAL- / (PROMPT-STRING = 'GEBEN SIE EINEN BENUTZERNAMEN (ENDE MIT '''')') /WHILE (STRUCT.NAME <>'') / READ-VARIABLE VARIABLE-NAME = STRUCT.TELEFONNUMMER,INPUT=*TERMINAL- / (PROMPT-STRING = 'GEBEN SIE EINE BENUTZER-TELEFON#') / LIST-OF-STRUCT=STRUCT,WRITE-MODE=*EXTEND / READ-VARIABLE VARIABLE-NAME = STRUCT.NAME,INPUT=*TERMINAL- / (PROMPT-STRING = 'GEBEN SIE EINEN BENUTZERNAMEN (ENDE MIT '''')') /END-WHILE /SHOW-VARIABLE LIST-OF-STRUCT
Beispiele: SDF-Kommando-String konvertieren
Beispiel 1
/DECLARE-VARIABLE MYSTRUCT(TYPE=*STRUCTURE(*DYNAMIC)) /SET-VARIABLE MYSTRUCT = *STRING-TO-VARIABLE/('OPERAND1=VALUE1(OPERAND2=VALUE2)') /SHOW-VARIABLE MYSTRUCT
Ausgabe
MYSTRUCT.OPERAND1.SYSSTRUC = VALUE1 MYSTRUCT.OPERAND1.OPERAND2 = VALUE2
Beispiel 2
/DCV V1(TYPE=*ANY),MULT-ELEM=*LIST /DCV V2(TYPE=*ANY),MULT-ELEM=*LIST /S = '(A,B,1, ,,F)' /V1 = *STR-TO-VAR(S) /V2 = *STR-TO-VAR(S,VAL-TYPE=*STR) /SHV V1,VAL=*C-LIT,LIST-INDEX=YES V1#1 = 'A' V1#2 = 'B' V1#3 = 1 V1#4 = 'F' /SHV V2,VAL=*C-LIT,LIST-INDEX=YES V2#1 = 'A' V2#2 = 'B' V2#3 = '1' V2#4 = ' ' V2#5 = '' V2#6 = 'F'