Bedingte Anweisungen werden verwendet, um den Ausführungsablauf in Abhängigkeit von bestimmten durch den Programmierer angegebenen Bedingungen ändern. Bedingte Anweisungen werden immer bewerten true oder false. Die Bedingungen sind in IF verwendet, auswerten und ausführen Aussagen. Die verschiedenen Arten der Bedingungen sind wie folgt:
Wenn Anweisung überprüft Bedingungen. Wenn eine Bedingung wahr ist das IF-Block ausgeführt wird; und wenn die Bedingung falsch ist, wird der ELSE-Block ausgeführt wird.
Ende, wenn wird verwendet, um die IF-Block zu beenden. Um den IF-Block zu beenden, kann ein Zeitraum verwendet werden statt END-IF . Aber es ist immer besser zu verwendet END-IF für mehrere IF-blöcke.
Nested-IF : IF innerhalb einer anderen IF-Block Blöcke erscheinen. Es gibt keine Grenze für die Tiefe des verschachtelt IF-Anweisungen.
Following is the syntax of IF condition statements:
IF [condition] THEN [COBOL statements] ELSE [COBOL statements] END-IF.
Beispiel
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 oben COBOL-Programm zu ausführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
IN LOOP 1 - IF BLOCK IN LOOP 2 - ELSE BLOCK
Beziehungen Zustand vergleicht zwei Operanden, von denen jeder kann eine Kennung, wörtliche oder arithmetischer Ausdruck sein. Algebraische Vergleich von numerischen Feldern wird unabhängig von ihrer Größe und Nutzungsklausel erfolgen.
Für nicht-numerische Operanden
Wenn zwei nicht-numerische Operanden gleicher Größe werden verglichen, dann Zeichen von links im Vergleich mit den entsprechenden Positionen, bis das Ende erreicht ist. Die Operanden, haltige größer dann Zeichenzahl ist größer erklärt.
Wenn zwei nicht-numerische Operanden von ungleicher Größe verglichen werden und dann die kürzere Datenelement mit Leerzeichen am Ende entsprechend der in dem vorherigen Punkt erwähnten Regeln hängt, bis die Größe der Operanden gleich wird und dann verglichen.
Da unten ist die Syntax der Beziehungen mit Bedingungsanweisungen:
[Data Name/Arithmetic Operation] [IS] [NOT] [Equal to (=),Greater than (>), Less than (<), Greater than or Equal (>=), Less than or equal (<=) ] [Data Name/Arithmetic Operation]
Beispiel
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 oben COBOL-Programm zu ausführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
WS-NUM1 IS GREATER THAN WS-NUM2
Zeichen Bedingung wird verwendet, um das Vorzeichen eines numerischen Operanden überprüfen. Er bestimmt, ob ein gegebener numerischer Wert größer als, kleiner als oder gleich Null ist.
Es folgt die Syntax von Zeichen Bedingungsanweisungen:
[Data Name/Arithmetic Operation] [IS] [NOT] [Positive, Negative or Zero] [Data Name/Arithmetic Operation]
Beispiel
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 oben COBOL-Programm zu ausführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
WS-NUM1 IS NEGATIVE WS-NUM2 IS POSITIVE
Klasse Bedingung wird verwendet, um zu überprüfen, ob ein Operand enthält nur Buchstaben oder numerischen Daten. Leerzeichen sind in alphabetischer, ALPHABETISCHER-LOWER und UPPER-ALPHABETIC berücksichtigt.
Im Folgenden ist die Syntax der Klasse Bedingungsanweisungen:
[Data Name/Arithmetic Operation>] [IS] [NOT] [NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER] [Data Name/Arithmetic Operation]
Beispiel
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-NUM1 IS NUMERIC'. STOP RUN.
JCL oben COBOL-Programm zu ausführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
WS-NUM1 IS ALPHABETIC WS-NUM1 IS NUMERIC
Eine Bedingung Name ist ein benutzerdefinierter Name. Sie enthält einen Satz von vom Benutzer angegebenen Werte. Er verhält sich wie Booleschen Variablen. Sie sind definierte mit Ebene-Nummer 88. Es wird kein PIC-Klausel.
Im Folgenden ist die Syntax von benutzerdefinierten Bedingungsanweisungen:
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
Beispiel
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 oben COBOL-Programm zu ausführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
Passed with 065 marks
Negierte Zustand wird mit dem Schlüsselwort NOT gegeben. Wenn eine Bedingung erfüllt ist, und wir haben nicht vor ihm gegeben ist, dann seinen endgültigen Wert wird falsch sein.
Im Folgenden ist die Syntax für Negierte Bedingungsanweisungen:
IF NOT [CONDITION] COBOL Statements END-IF.
Beispiel
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 oben COBOL-Programm zu ausführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
ELSE-BLOCK
Eine kombinierte Bedingung enthält zwei oder mehr Bedingungen mit logischen Operatoren AND oder OR verbunden.
Es folgt die Syntax der kombinierte Bedingung Aussagen:
IF [CONDITION] AND [CONDITION] COBOL Statements END-IF.
Beispiel
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 oben COBOL-Programm zu ausführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
Both condition OK
Bewerten Verb ist ein Austausch der Reihe von IF-ELSE-Anweisung. Es kann verwendet werden, um mehr als eine Bedingung zu evaluieren. Es ist ähnlich wie Anweisung in C-Programmen wechseln.
Beispiel
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 oben COBOL-Programm zu ausführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:
WS-A GREATER THAN 2