Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

SDF-Kommando-Strings zu S-Variablen konvertieren und umgekehrt

&pagelevel(4)&pagelevel

SDF-Kommando-Strings können in S-Variablen vom Typ Struktur oder Liste gemäß ganz bestimmter Regeln konvertiert werden. Genauso ist es umgekehrt möglich, S-Variablen vom Typ Struktur oder Liste in SDF-Strings zu konvertieren.

Die Konvertierung eines SDF-Kommando-Strings in eine S-Variable wird mit dem Operanden *STRING-TO-VARIABLE(...) im Kommando SET-VARIABLE eingestellt (siehe "SET-VARIABLE Variablen einen Wert zuweisen "), die umgekehrte Konvertierung mit der vordefinierten Funktion VARIABLE-TO-STRING( ) (siehe "VARIABLE-TO-STRING( ) Variable konvertieren ").

Hinweis

Die Angabe von Stellungsoperanden bei SET-VARIABLE ist für die Konvertierung nicht möglich. Sie führt zu Fehlermeldungen.

Konvertierungsregeln

SDF-Kommando-Strings zu S-Variablen konvertieren

  1. Operanden werden in Strukturelemente konvertiert.

  2. Einfache Operandenwerte werden in einfache Strukturelement-Werte konvertiert.

  3. SDF-Listen werden in Listenvariablen konvertiert.

  4. Die Konvertierung erfolgt unabhängig von SDF-Datentypen.
    Standardmäßig (VALUE-TYPE = *STD) gilt Folgendes: Wenn im Eingabe-String ein Integer-Wert gefunden wird, wird für die Variable als Datentyp Integer abgespeichert. Wenn im String TRUE oder FALSE gefunden wird (in Groß- oder Kleinbuchstaben), wird für die Variable als Datentyp Boolean abgespeichert. In allen anderen Fällen wird für die Variable als Datentyp String abgespeichert.
    Bei Angabe VALUE-TYPE = *STRING wird wertunabhängig für die Variable als Datentyp String abgespeichert.

  5. Kommando-/Anweisungsnamen werden in Werte von Elementen mit dem reservierten Namen SYSOPER konvertiert.

  6. Struktureinleitende Werte werden in Werte von Elementen mit dem reservierten Namen SYSSTRUC konvertiert.

  7. Operanden in SDF-Strukturen werden in Strukturelement-Namen der 2. Ordnung konvertiert. Diese Elemente werden an den Element-Namen angehängt, der aus der Konvertierung des Operanden resultiert, der wiederum die Struktur bezeichnet.

S-Variablen zu SDF-Kommando-Strings konvertieren

S-Variablen vom Typ String werden in Zeichenketten ähnlich der &-Ersetzung konvertiert. Integer-Werte werden automatisch in Strings konvertiert. Boolean-Werte werden in die String-Werte TRUE bzw. FALSE konvertiert.

So muss eine S-Variable folgendermaßen initialisiert werden, wenn der Wert bei der Konvertierung einer S-Variablen zu einem SDF-String ein Wert vom Typ C-String ist:

/SET-VARIABLE DATA.OPER = 'C''mychain'''

Damit wird der String-Wert 'C''mychain''' in der Variable DATA.OPER gespeichert und bei der Konvertierung in folgende SDF-Syntax umgewandelt:

OPER = C'mychain'

Das führt dazu, dass der Wert C'mychain' mit dem SDF-Datentyp <C-String> gemäß dem Operanden OPER spezifiziert wird.

Zusammenfassung

SDF-Syntax-String

S-Variablen-Aggregat (Name DATA)

OPER = value

DATA.OPER = 'value'

operation oper1 = val1

DATA.SYSOPER = 'operation'
DATA.OPER1  = 'val1'

oper = struc (oper1 = val1)

DATA.OPER.SYSSTRUC = 'struc'
DATA.OPER.OPER1   = 'val1'

oper = (val1,val2,val3)

DATA.OPER#1 = 'val1'
DATA.OPER#2 = 'val2'
DATA.OPER#3 = 'val3'

Ausnahmen

Nur die externe Form von SDF-Strings wird nach diesen Regeln zerlegt. Die Basisdaten, die verarbeitet werden, sind die Zeichenketten. Weder semantische Informationen noch interne SDF-Syntax-Deskriptoren werden konvertiert in S-Variable gespeichert: z.B. wenn OPER = A (OP1=VAL1) in eine S-Variable gespeichert wird, wird darin nicht angezeigt, ob A ein Schlüsselwort (keyword), ein Name (name) oder ein Dateiname (filename) ist.

Einschränkungen bei der String-Eingabe

Der SDF-String FROM=(file,*LIB(LIB=lib,EL=elem)) kann nicht in eine S-Variable übersetzt werden, weil SDF-P keine heterogenen Listen unterstützt.

Beispiele (für Einschränkungen)

Beispiel 1

FROM=(file,*LIB(LIB=lib,EL=elem)) wird konvertiert in:

A.FROM#1.SYSSTRUC = 'file'
A.FROM#2.SYSSTRUC = '*LIB'
A.FROM#2.LIB = 'lib'
A.FROM#2.EL = 'elem'

Solche Variablenaggregate sind möglich für Listen dynamischer Strukturen. Jedoch muss das erste Listenelement als SYSSTRUC-Element konvertiert werden, das nicht übereinstimmt mit der aktuellen Struktur des SDF-Strings. A.FROM#1 = 'file' ist nicht möglich.

Beispiel 2

OP = (a,b,c) wird konvertiert in:

A.OP#1 = 'a'
A.OP#2 = 'b'
A.OP#3 = 'c'

Dagegen wird OP = (a,b,c(OPR=d)) konvertiert in:

A.OP#1.SYSSTRUC = 'a'
A.OP#2.SYSSTRUC = 'b'
A.OP#3.SYSSTRUC = 'c'
A.OP#3.OPR = 'd'

Hinweis

Die Konvertierung eines einzelnen Wertes ist von der Struktur des Eingabe-Strings abhängig und kann deshalb zurückgewiesen werden (außer bei VALUE-TYPE= *STRING).

Beispiel 3

Die SDF-Strings FCB-TYPE=ISAM und FCB-TYPE=ISAM(KEY-POS=5,KEY-LEN=8) führt zu zwei verschiedenen Strukturen in SDF-P:

DATA.FCB-TYPE = 'ISAM'

und

DATA.FCB-TYPE.SYSSTRUC = 'ISAM'
DATA.FCB-TYPE.KEY-LEN = 8
DATA.FCB-TYPE.KEY-POS = 5

Dabei können in S-Prozeduren die zwei Variablenstrukturen durch die vordefinierte Funktion VARIABLE-ATTRIBUTE(..., ATTRIBUTE = *TYPE) sortiert werden. So sind z.B. bei VARIABLE-ATTRIBUTE('DATA.FCB-TYPE', ATTRIBUTE = *TYPE) die Ergebnisse:

  • *STRUCTURE, wenn der Operandenwert eine Struktur ist.

  • in den anderen Fällen *ANY oder *STRING

Beispiel 4

Die Strings OPER=A(OP1=X,OP2=Y) und OPER=B(OP1=X,OP2=Y) erzeugen dieselben Strukturelemente, allerdings hat OP1 in beiden Fällen unterschiedliche Bedeutung:

DATA.OPER.SYSSTRUC = 'A'
DATA.OPER.OP1 = 'X'
DATA.OPER.OP2 = 'Y'
DATA.OPER.SYSSTRUC = 'B'
DATA.OPER.OP1 = 'X'
DATA.OPER.OP2 = 'Y'