Was stuck for a long time trying to figure out a clean way of executing an action if three numbers are NOT the value of a variable (inside of a read loop).
I first tried:
IF NOT TS-TYPE = 1 OR 2 OR 3
and something similar to:
01 ERRTRAN-VALID-TYPES PIC X.
88 V-VALID-TYPES VALUES "1" "2" "7".
MOVE SPACE TO ERRTRAN-VALID-TYPES
EVALUATE TRUE
WHEN NOT V-VALID-TYPES
DISPLAY "TYPE ERROR"
SET V-ERROR TO TRUE
MOVE AR-ACCNO TO ER-ACCNO
MOVE AR-NAME TO ER-NAME
MOVE TS-TYPE TO ER-TYPE
MOVE TS-COMPLETED TO ER-COMPLETED
MOVE "INVALID TYPE" TO ER-ERRORMSG
WRITE ERR-PRINT-LINE OF ERRTRAN FROM ERROR-RECORDS
WHEN OTHER
DISPLAY "VALID"
CONTINUE
END-EVALUATE
But I could not get these 2 first way working, code compiled but the logic failed …
What eventually worked was the following, but is this really an ideal solution? I doubt it
EVALUATE TS-TYPE
WHEN 1
WHEN 2
WHEN 7
CONTINUE
WHEN OTHER
DISPLAY "TYPE ERROR"
SET V-ERROR TO TRUE
MOVE AR-ACCNO TO ER-ACCNO
MOVE AR-NAME TO ER-NAME
MOVE TS-TYPE TO ER-TYPE
MOVE TS-COMPLETED TO ER-COMPLETED
MOVE "INVALID TYPE" TO ER-ERRORMSG
WRITE ERR-PRINT-LINE OF ERRTRAN FROM ERROR-RECORDS
END-EVALUATE
Would be happy to see examples of what a more experienced Cobol programmer would use.