Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

FOR FOR-Block einleiten

&pagelevel(4)&pagelevel

Anwendungsgebiet: PROCEDURE

Kommandobeschreibung

Das Kommando FOR leitet einen FOR-Block ein; das Kommando /END-FOR beendet einen FOR-Block. Das Konstrukt ist eine FOR-Schleife. Der Benutzer definiert eine Laufvariable <composed-name 1..255>. Die Anzahl der Schleifendurchläufe und der Wert der Laufvariablen sind abhängig von der Zuweisung rechts vom Gleichheitszeichen (Ausdruck, Listenvariable (*LIST), „Counter“):

  • *LIST(...)
    Die Anzahl der Schleifendurchläufe ist gleich der Anzahl der Variablenelemente. Bei jedem Schleifendurchlauf wird der Laufvariablen in aufsteigender Reihenfolge der Elemente der Wert des Elementes zugewiesen.

  • *COUNTER(...)
    Die Anzahl der Schleifendurchläufe wird durch den Anfangswert (FROM=), den Endwert (TO=) und die Schrittweite (INCREMENT=) festgelegt. Die Laufvariable enthält jeweils den aktuellen Schleifenwert.

  • <text 0..1800 with-low>
    Die Anzahl der Schleifendurchläufe ist gleich der Anzahl der Elemente der Werteliste. Bei jedem Schleifendurchlauf wird der Laufvariablen - von links beginnend - der jeweilige Ausdruck (String-, arithmetischer -, boolscher Ausdruck, ...) zugewiesen.

Werden <text 0..1800 with-low>, *LIST(...) und *COUNTER(...) in einer Werteliste gemischt, so wird diese Liste - von links beginnend - abgearbeitet, so wie oben angegeben.

Eine Ausdrucksersetzung (&....) in einem der FOR-Operanden erfolgt nur beim Eintritt in die FOR-Schleife, nicht bei jedem Schleifendurchlauf.

Hinweis

Die Operanden des Kommandos FOR werden 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.

Zu FOR-Blöcken siehe auch Abschnitt „Schleifen definieren“.

Format

FOR

<composed-name 1..255> = list-poss(2000): *LIST(...) / *COUNTER (...) / <text 0..1800 with-low expr>

*LIST(...)

LIST-NAME = <composed-name 1..255>

*COUNTER(...)

FROM = <text 0..1800 arithm-expr>

,TO = *UNLIMITED / <text 0..1800 arithm-expr>

,INCREMENT = 1 / <text 0..1800 arithm-expr>

,CONDITION (DECLARE-ELEMENT Strukturelement deklarieren )= *NONE / <text 0..1800 with-low bool-expr>

Operandenbeschreibung

<composed-name 1..255> =
Bezeichnet die Laufvariable. Die Laufvariable muss vom gleichen Typ sein wie die Elemente rechts vom Gleichheitszeichen oder sie muss konvertierbar sein.

<composed-name 1..255> = *LIST(LIST-NAME=<composed-name 1..255>)
Der Laufvariablen wird eine Listenvariable zugewiesen. Die Anzahl der Schleifendurchläufe ist gleich der Anzahl der Variablenelemente. Bei jedem Schleifendurchlauf wird der Laufvariablen in aufsteigender Reihenfolge der Elemente der Wert des Elementes zugewiesen.Wenn Laufvariable und Listenvariable vom Typ Struktur sind und gleichnamige Elemente haben, so werden die Elemente der Laufvariablen von den gleichnamigen Elementen der Listenvariable überschrieben (siehe Kommando SET-VARIABLE, Operand WRITE-MODE =*REPLACE, "SET-VARIABLE Variablen einen Wert zuweisen ", Abschnitt „Listen“ (Zusammengesetzte Variablen ), und Kapitel „Ausdrücke“).

LIST-NAME = <composed-name 1..255>
Name der Listenvariablen.

<composed-name 1..255> = *COUNTER (...)
Die Anzahl der Schleifendurchläufe wird durch den Anfangswert (FROM=), den Endwert (TO=) und die Schrittweite (INCREMENT=) festgelegt. Diese Werte können während des Laufs nicht mehr modifiziert werden. Die Laufvariable enthält jeweils den aktuellen Schleifenwert. Der Wert der Laufvariablen kann aber auch während des Schleifendurchlaufs durch direkte Zuweisung modifiziert werden. Die Laufvariable muss vom Typ INTEGER oder konvertierbar sein. Zu „arithmetischer Ausdruck“ siehe "Typen von Ausdrücken ".

FROM = <text 0..1800 arithm-expr>
Anfangswert für die Laufvariable (Zahl oder arithmetischer Ausdruck).

TO = *UNLIMITED / <text 0..1800 arithm-expr>
Endwert für die Laufvariable (Zahl oder arithmetischer Ausdruck).
*UNLIMITED bedeutet: Der Endwert ist 231-1, wenn für die Schrittweite ein Wert > 0 angegeben wurde bzw. -231 für einen Schrittweitenwert < 0. Das Überschreiten dieser Grenzwerte löst einen Fehler aus (Verzweigung zur Fehlerbehandlung).

INCREMENT = 1 / <text 0..1800 arithm-expr>
Schrittweite, um die der aktuelle Schleifenwert nach jedem Schleifendurchlauf erhöht wird (Zahl oder arithmetischer Ausdruck). Die Zählrichtung wird durch das Vorzeichen bestimmt. Sie muss in Richtung Endwert führen, sonst wird der Lauf nicht durchgeführt. Ändert das Increment während des Schleifenablaufes seine Zählrichtung (sein Vorzeichen), wird der Lauf abgebrochen.

Hinweis

Bei Schrittweite 0 wird die Schleife solange durchlaufen, bis die angegebene Bedingung (Operand CONDITION=...) nicht mehr erfüllt ist bzw. mit EXIT-BLOCK ein Aussprung aus der Schleife erfolgt.

<composed-name 1..255> = <text 0..1800 with-low expr>
Beliebiger Ausdruck (String-, arithmetischer -, boolscher Ausdruck, ...). Die Anzahl der Schleifendurchläufe ist gleich der Anzahl der Elemente der Werteliste. Bei jedem Schleifendurchlauf wird der Laufvariablen - in der Werteliste von links beginnend - der jeweilige Ausdruck (String, Zahl, ...) zugewiesen.

CONDITION = *NONE / <text 0..1800 bool-expr>
Bezeichnet eine Bedingung, die am Beginn jeden Schleifendurchlaufs geprüft wird. Die FOR-Schleife wird durchlaufen, wenn die angegebene Bedingung den Wert „TRUE“ besitzt. Der FOR-Lauf wird abgebrochen, wenn die Bedingung den Wert „FALSE“ ergibt. *NONE bedeutet: Eine Bedingung wird nicht ausgewertet, die Schleife wird immer durchlaufen. Zu „boolschen Ausdruck“ siehe Seite "Typen von Ausdrücken ".

Kommando-Returncode

(SC2)SC1MaincodeBedeutung

0CMD0001Ohne Fehler

1CMD0202Syntaxfehler

1SDP0118Kommando im falschen Kontext

1SDP0223Falsche Umgebung

3CMD2203Falsche Syntaxdatei

32CMD0221Systemfehler (interner Fehler)

64SDP0091Semantikfehler

130SDP0099Kein Adressraum mehr verfügbar

Beispiel 1

/DECLARE-VARIABLE A,MULTIPLE-ELEMENTS=*LIST
/DECLARE-VARIABLE I
/SET-VARIABLE A=1436,WRITE-MODE=*EXTEND
/A=1455,WRITE-MODE=*EXTEND
/A=1577,WRITE-MODE=*EXTEND
/FOR I=*LIST(A)
/CANCEL-JOB JOB-ID=*TSN(&I)
/END-FOR

Die FOR-Schleife setzt folgende Kommandos ab:

/CANCEL-JOB JOB-ID=*TSN(1436)
/CANCEL-JOB JOB-ID=*TSN(1455)
/CANCEL-JOB JOB-ID=*TSN(1577) 

Beispiel 2

/FOR I=(5,7,12,2,3),CONDITION=(I<10)
/SHOW-VARIABLE I
/END-FOR

Ausgabe

I = 5
I = 7

Die Elemente 12, 2, 3 der Liste werden nicht mehr ausgewertet.

Beispiel 3

Die Primzahlen im Bereich 2 bis zur eingegebenen Zahl werden berechnet und ausgegeben.

/       DECL-VAR N(TYPE=*INTEGER)
/       DECL-VAR PRIMARY-NUMBERS(TYPE=*INTEGER),MULT-ELEM=*LIST
/       WR-TEXT 'Bitte Ganzzahl >= 2 eingeben!'
/       READ-VAR N,INPUT=*TERMINAL
/       PRIMARY-NUMBERS# = 2
/LOOP1: FOR I = *COUNTER(FROM=3,TO=N,INCREMENT=2)
/LOOP2:     FOR J = *LIST(LIST-NAME=PRIMARY-NUMBERS)
/               CYCLE LOOP1,COND=(I MOD J == 0)
/           END-FOR LOOP2
/           PRIMARY-NUMBERS = I ,MODE=*EXTEND
/       END-FOR LOOP1
/       WR-TEXT 'Primzahlen im Bereich von 2 bis &(N):'
/       SHOW-VAR PRIMARY-NUMBERS,INF=*PAR(NAME=*NONE)
/       EXIT-PROC

Beispiel 4

Verarbeiten einer Listenvariablen unter Mitführung des Index.

/DECL-VAR SPRACHEN,MULT-ELEM=*LIST
/SPRACHEN = 'Deutsch', WR-MODE=*EXTEND
/SPRACHEN = 'Englisch', WR-MODE=*EXTEND
/SPRACHEN = 'Franzoesisch', WR-MODE=*EXTEND
/SPRACHEN = 'Spanisch', WR-MODE=*EXTEND
/
/FOR I = *COUNTER(FROM=1,TO=SIZE('SPRACHEN'))
/    WR-TEXT '&(SPRACHEN#I) ist &(I). Sprache'
/END-FOR 

Ausgabe

Deutsch ist 1. Sprache
Englisch ist 2. Sprache
Franzoesisch ist 3. Sprache
Spanisch ist 4. Sprache