COBOL - Bedingte Anweisungen
Bedingte Anweisungen werden verwendet, um den Ausführungsfluss in Abhängigkeit von bestimmten vom Programmierer angegebenen Bedingungen zu ändern. Bedingte Anweisungen werden immer als wahr oder falsch bewertet. Bedingungen werden in IF-, Evaluate- und Perform-Anweisungen verwendet. Die verschiedenen Arten von Bedingungen sind wie folgt:
- IF-Bedingungserklärung
- Beziehungsbedingung
- Zeichenbedingung
- Klassenbedingung
- Bedingung-Name Bedingung
- Negierter Zustand
- Kombinierter Zustand
IF-Bedingungserklärung
IF-Anweisung prüft auf Bedingungen. Wenn eine Bedingung erfüllt ist, wird der IF-Block ausgeführt. und wenn die Bedingung falsch ist, wird der ELSE-Block ausgeführt.
END-IFwird verwendet, um den IF-Block zu beenden. Um den IF-Block zu beenden, kann anstelle von END-IF eine Periode verwendet werden. Es ist jedoch immer vorzuziehen, END-IF für mehrere IF-Blöcke zu verwenden.
Nested-IF- IF-Blöcke erscheinen in einem anderen IF-Block. Die Tiefe verschachtelter IF-Anweisungen ist unbegrenzt.
Syntax
Es folgt die Syntax von IF-Bedingungsanweisungen -
IF [condition] THEN
[COBOL statements]
ELSE
[COBOL statements]
END-IF.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(9).
01 WS-NUM2 PIC 9(9).
01 WS-NUM3 PIC 9(5).
01 WS-NUM4 PIC 9(6).
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 25 TO WS-NUM1 WS-NUM3.
MOVE 15 TO WS-NUM2 WS-NUM4.
IF WS-NUM1 > WS-NUM2 THEN
DISPLAY 'IN LOOP 1 - IF BLOCK'
IF WS-NUM3 = WS-NUM4 THEN
DISPLAY 'IN LOOP 2 - IF BLOCK'
ELSE
DISPLAY 'IN LOOP 2 - ELSE BLOCK'
END-IF
ELSE
DISPLAY 'IN LOOP 1 - ELSE BLOCK'
END-IF.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK
Beziehungsbedingung
Die Beziehungsbedingung vergleicht zwei Operanden, von denen jeder ein Bezeichner, ein Literal oder ein arithmetischer Ausdruck sein kann. Der algebraische Vergleich numerischer Felder erfolgt unabhängig von Größe und Verwendungsklausel.
For non-numeric operands
Wenn zwei nicht numerische Operanden gleicher Größe verglichen werden, werden die Zeichen von links mit den entsprechenden Positionen verglichen, bis das Ende erreicht ist. Der Operand mit einer größeren Anzahl von Zeichen wird als größer deklariert.
Wenn zwei nicht numerische Operanden ungleicher Größe verglichen werden, wird das kürzere Datenelement am Ende mit Leerzeichen versehen, bis die Größe der Operanden gleich ist, und dann gemäß den im vorherigen Punkt genannten Regeln verglichen.
Syntax
Im Folgenden wird die Syntax der Beziehungsbedingungsanweisungen angegeben.
[Data Name/Arithmetic Operation]
[IS] [NOT]
[Equal to (=),Greater than (>), Less than (<),
Greater than or Equal (>=), Less than or equal (<=) ]
[Data Name/Arithmetic Operation]
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(9).
01 WS-NUM2 PIC 9(9).
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 25 TO WS-NUM1.
MOVE 15 TO WS-NUM2.
IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN
DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2'
ELSE
DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2'
END-IF.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, erhalten Sie das folgende Ergebnis:
WS-NUM1 IS GREATER THAN WS-NUM2
Zeichenbedingung
Die Vorzeichenbedingung wird verwendet, um das Vorzeichen eines numerischen Operanden zu überprüfen. Es bestimmt, ob ein gegebener numerischer Wert größer, kleiner oder gleich NULL ist.
Syntax
Es folgt die Syntax der Zeichenbedingungsanweisungen -
[Data Name/Arithmetic Operation]
[IS] [NOT]
[Positive, Negative or Zero]
[Data Name/Arithmetic Operation]
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC S9(9) VALUE -1234.
01 WS-NUM2 PIC S9(9) VALUE 123456.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS POSITIVE THEN
DISPLAY 'WS-NUM1 IS POSITIVE'.
IF WS-NUM1 IS NEGATIVE THEN
DISPLAY 'WS-NUM1 IS NEGATIVE'.
IF WS-NUM1 IS ZERO THEN
DISPLAY 'WS-NUM1 IS ZERO'.
IF WS-NUM2 IS POSITIVE THEN
DISPLAY 'WS-NUM2 IS POSITIVE'.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, erhalten Sie das folgende Ergebnis:
WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE
Klassenbedingung
Die Klassenbedingung wird verwendet, um zu überprüfen, ob ein Operand nur Alphabete oder numerische Daten enthält. Leerzeichen werden in ALPHABETIC, ALPHABETIC-LOWER und ALPHABETIC-UPPER berücksichtigt.
Syntax
Es folgt die Syntax von Klassenbedingungsanweisungen -
[Data Name/Arithmetic Operation>]
[IS] [NOT]
[NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]
[Data Name/Arithmetic Operation]
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC X(9) VALUE 'ABCD '.
01 WS-NUM2 PIC 9(9) VALUE 123456789.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS ALPHABETIC THEN
DISPLAY 'WS-NUM1 IS ALPHABETIC'.
IF WS-NUM1 IS NUMERIC THEN
DISPLAY 'WS-NUM1 IS NUMERIC'.
IF WS-NUM2 IS NUMERIC THEN
DISPLAY 'WS-NUM2 IS NUMERIC'.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC
Bedingungsname Bedingung
Ein Bedingungsname ist ein benutzerdefinierter Name. Es enthält eine Reihe von Werten, die vom Benutzer angegeben wurden. Es verhält sich wie boolesche Variablen. Sie sind mit der Levelnummer 88 definiert. Es wird keine PIC-Klausel geben.
Syntax
Es folgt die Syntax von benutzerdefinierten Bedingungsanweisungen -
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM PIC 9(3).
88 PASS VALUES ARE 041 THRU 100.
88 FAIL VALUES ARE 000 THRU 40.
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 65 TO WS-NUM.
IF PASS
DISPLAY 'Passed with ' WS-NUM ' marks'.
IF FAIL
DISPLAY 'FAILED with ' WS-NUM 'marks'.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Passed with 065 marks
Negierter Zustand
Der negierte Zustand wird mit dem Schlüsselwort NOT angegeben. Wenn eine Bedingung wahr ist und wir NICHT davor angegeben haben, ist ihr Endwert falsch.
Syntax
Es folgt die Syntax der Anweisungen für negierte Bedingungen:
IF NOT [CONDITION]
COBOL Statements
END-IF.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(2) VALUE 20.
01 WS-NUM2 PIC 9(9) VALUE 25.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN
DISPLAY 'IF-BLOCK'
ELSE
DISPLAY 'ELSE-BLOCK'
END-IF.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
ELSE-BLOCK
Kombinierter Zustand
Eine kombinierte Bedingung enthält zwei oder mehr Bedingungen, die mit logischen Operatoren UND oder ODER verbunden sind.
Syntax
Es folgt die Syntax kombinierter Bedingungsanweisungen -
IF [CONDITION] AND [CONDITION]
COBOL Statements
END-IF.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(2) VALUE 20.
01 WS-NUM2 PIC 9(2) VALUE 25.
01 WS-NUM3 PIC 9(2) VALUE 20.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN
DISPLAY 'Both condition OK'
ELSE
DISPLAY 'Error'
END-IF.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Both condition OK
Verb auswerten
Das Verb auswerten ist ein Ersatz für eine Reihe von IF-ELSE-Anweisungen. Es kann verwendet werden, um mehr als eine Bedingung zu bewerten. Es ähnelt der SWITCH-Anweisung in C-Programmen.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 0.
PROCEDURE DIVISION.
MOVE 3 TO WS-A.
EVALUATE TRUE
WHEN WS-A > 2
DISPLAY 'WS-A GREATER THAN 2'
WHEN WS-A < 0
DISPLAY 'WS-A LESS THAN 0'
WHEN OTHER
DISPLAY 'INVALID VALUE OF WS-A'
END-EVALUATE.
STOP RUN.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-A GREATER THAN 2