COBOL - Bedingung Anweisungen



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:

  • IF Bedingung Erklärung
  • Vergleichsbedingung
  • Zeichen Zustand
  • Class Klasse
  • Zustand-Name Zustand
  • Negierte Zustand
  • kombiniert Condition

IF Bedingung Erklärung

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.

Syntax

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

Vergleichsbedingung

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.

Syntax

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 Zustand

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.

Syntax

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 Zustand

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.

Syntax

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

Zustand-Name Zustand

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.

Syntax

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

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.

Syntax

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

Kombiniert Condition

Eine kombinierte Bedingung enthält zwei oder mehr Bedingungen mit logischen Operatoren AND oder OR verbunden.

Syntax

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

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
Advertisements