Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Arrays und Listen

&pagelevel(4)&pagelevel

Neben den einfachen Variablen, die jeweils genau einen Wert vom Typ STRING, INTEGER oder BOOLEAN enthalten können, gibt es auch Variablen, die eine größere Zahl gleichartiger Werte aufnehmen können. Hierzu gehören die Arrays; sie bieten eine (vorgebbare) Anzahl von Speicherplätzen, die wahlfrei durch Angabe eines Indexwertes angesprochen werden können:

/DECLARE-VARIABLE KOSTEN(TYPE=*INTEGER), -
/                 MULTIPLE-ELEMENTS = *ARRAY(1990,2099)
/KOSTEN#1996 = 4090 "Cents je Stunde"
/JAHR = 1996
/WHILE (JAHR < 2005)    "Schleife ueber 10 Jahre"
/  NEUE-KOSTEN = (KOSTEN#JAHR * 105 + 50) / 100    "+ 5% pro Jahr"
/  JAHR = JAHR + 1
/  KOSTEN#JAHR = NEUE-KOSTEN
/END-WHILE

Der Indexwert wird als Zahl oder als Name einer einfachen Integervariablen durch das Zeichen # mit dem Variablennamen verbunden. Innerhalb des zulässigen Indexbereichs, der bei der Deklaration festgelegt wird, können beliebige Arrayelemente unabhängig voneinander erzeugt, angesprochen und auch wieder gelöscht werden (hierzu s.a. das Kommando FREE-VARIABLE).

Listen hingegen bestehen immer aus einer Reihe von Werten, die fortlaufend von 1 an nummeriert sind. Es können nur Werte am Ende oder am Anfang der Liste eingefügt werden; im letzteren Fall werden die Indizes aller existierenden Werte automatisch um 1 erhöht. Da die lückenlose Aufeinanderfolge der Listenelemente stets sichergestellt ist, können Listen besonders einfach in Schleifen abgearbeitet werden (FOR-Kommando). Die Kommandos READ-VARIABLE und SHOW-VARIABLE unterstützen zudem die satzweise Übertragung von Dateiinhalten in bzw. aus Listen. Die folgende Beispielprozedur schreibt die Sätze einer Datei in umgekehrter Reihenfolge in eine Ausgabedatei und bedient sich hierzu zweier Listenvariablen:

/DECL-PARAM (VON,NACH)
/DECL-VAR (EIN,AUS),MULT-ELEM=*LIST
/READ-VAR *LIST(EIN),STR-QUOTES=*NO,INPUT=&VON
/FOR ZEILE=*LIST(EIN)
/  AUS = ZEILE, WRITE-MODE=*PREFIX
/END-FOR
/SHOW-VAR AUS,PREFIX=*NO,OUTPUT=&NACH    "###"

Eine Sonderrolle nimmt das vordefinierte Array SYSSWITCH ein. Seine 32 Elemente (SYSSWITCH#0 bis SYSSWITCH#31) vom Typ BOOLEAN werden intern auf die Auftragsschalter des aktuellen Auftrags abgebildet, die auf diese Weise unmittelbar gesetzt und abgefragt werden können:

/SW4-VORHER = SYSSWITCH#4      "###"
/SYSSWITCH#4 = TRUE
/START-EXECUTABLE-PROGRAM $EDT
@...
@HALT
/SYSSWITCH#4 = SW4-VORHER