Reading — step 1 of 4
Learn
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…