Skip to content
Nested Conditions and Boolean Logic
step 1/4

Reading — step 1 of 4

Learn

~2 min readModular COBOL

COBOL has rich condition support — both for IF and EVALUATE.

Boolean operators

       IF AGE >= 18 AND COUNTRY = "US"
           PERFORM PROCESS-US-ADULT.

       IF STATUS = "A" OR STATUS = "P"
           PERFORM PROCESS-OPEN.

       IF NOT (AGE < 18)
           PERFORM PROCESS-ADULT.

Implicit subjects

A neat COBOL feature — repeated subject can be implicit:

       IF AGE = 18 OR 21 OR 25
           ...
       END-IF.
       *> equivalent to:
       IF AGE = 18 OR AGE = 21 OR AGE = 25 ...

       IF STATUS = "A" OR "P" OR "R"
           ...

Watch for this — old COBOL code uses it heavily and it confuses modern readers.

EVALUATE — multi-way branching

Like a switch on steroids:

       EVALUATE TRUE
           WHEN AGE < 13               DISPLAY "child"
           WHEN AGE < 20               DISPLAY "teen"
           WHEN AGE >= 65              DISPLAY "senior"
           WHEN OTHER                  DISPLAY "adult"
       END-EVALUATE.

Evaluating against TRUE lets each WHEN have its own boolean expression — like a series of if/elseif.

Multiple subjects — like multi-arg pattern matching:

       EVALUATE GRADE-LEVEL ALSO ATTENDANCE
           WHEN "A" ALSO 95 THRU 100   DISPLAY "perfect"
           WHEN "A" ALSO 80 THRU 94    DISPLAY "great"
           WHEN "A" ALSO ANY            DISPLAY "a but slack"
           WHEN OTHER                   DISPLAY "average"
       END-EVALUATE.

ALSO separates each dimension. Match all dimensions to take that branch.

Range conditions

       IF AGE >= 18 AND <= 64
           DISPLAY "working age".

Class conditions

Built-in tests:

       IF FIELD IS NUMERIC
       IF FIELD IS ALPHABETIC
       IF FIELD IS ALPHANUMERIC
       IF FIELD IS POSITIVE / NEGATIVE / ZERO
       IF FIELD IS NOT NUMERIC

Useful when validating ACCEPTed input that might be junk.

Complex example: validation

       IF C-AGE IS NUMERIC
           AND FUNCTION NUMVAL (C-AGE) >= 0
           AND FUNCTION NUMVAL (C-AGE) <= 130
               DISPLAY "valid age"
       ELSE
               DISPLAY "invalid: " C-AGE
       END-IF.

FUNCTION NUMVAL converts an alphanumeric to a number — handy when the source PIC is X but you want to do math.

Common COBOL idioms

The "end-of-file flag" pattern:

       01 EOF-FLAG  PIC X VALUE "N".
           88 END-OF-FILE   VALUE "Y".
           88 NOT-END       VALUE "N".

       PERFORM UNTIL END-OF-FILE
           READ INPUT-FILE
               AT END SET END-OF-FILE TO TRUE
               NOT AT END PERFORM PROCESS-RECORD
           END-READ
       END-PERFORM.

This is the canonical mainframe loop — read until EOF, process each record, exit cleanly.

Discussion

Ask a question, share an insight, or help someone who’s stuck.

Sign in to post a comment or reply.

Loading…