MainframeMaster

COBOL Tutorial

COBOL END-EVALUATE Clause - Quick Reference

Progress0 of 0 lessons

Overview

The END-EVALUATE clause marks the end of an EVALUATE statement block. It is a required terminator that ensures proper structure and prevents compilation errors in COBOL programs.

Purpose and Usage

  • Block termination - End EVALUATE statement blocks
  • Structure control - Maintain proper program structure
  • Compilation requirement - Required for successful compilation
  • Nesting support - Enable nested EVALUATE statements
  • Flow control - Define program execution boundaries

EVALUATE Block Structure

EVALUATE condition
WHEN value1
statements...
WHEN value2
statements...
WHEN OTHER
statements...
END-EVALUATE ← Terminator
Proper block structure with termination

END-EVALUATE marks the end of the EVALUATE block structure.

Syntax

The END-EVALUATE clause follows specific syntax patterns and is required to properly terminate EVALUATE statement blocks.

Basic Syntax

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
* Basic END-EVALUATE syntax EVALUATE condition WHEN value1 statements... WHEN value2 statements... WHEN OTHER statements... END-EVALUATE * Simple example EVALUATE WS-STATUS WHEN "A" DISPLAY "Active" WHEN "I" DISPLAY "Inactive" WHEN OTHER DISPLAY "Unknown" END-EVALUATE * With multiple conditions EVALUATE TRUE WHEN WS-AGE < 18 DISPLAY "Minor" WHEN WS-AGE >= 18 AND WS-AGE < 65 DISPLAY "Adult" WHEN WS-AGE >= 65 DISPLAY "Senior" END-EVALUATE

END-EVALUATE is required to terminate every EVALUATE statement block.

EVALUATE vs IF Structure

FeatureEVALUATEIF
StartEVALUATEIF
ConditionsWHEN clausesELSE IF
DefaultWHEN OTHERELSE
EndEND-EVALUATEEND-IF
Use caseMulti-way branchingSimple conditions

Nested EVALUATE Structure

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
* Nested EVALUATE with proper END-EVALUATE EVALUATE WS-CATEGORY WHEN "A" EVALUATE WS-SUBTYPE WHEN "X" DISPLAY "Category A, Subtype X" WHEN "Y" DISPLAY "Category A, Subtype Y" WHEN OTHER DISPLAY "Category A, Unknown subtype" END-EVALUATE * Inner EVALUATE WHEN "B" DISPLAY "Category B" WHEN OTHER DISPLAY "Unknown category" END-EVALUATE * Outer EVALUATE * With comments for clarity EVALUATE WS-STATUS WHEN "ACTIVE" PERFORM PROCESS-ACTIVE WHEN "PENDING" EVALUATE WS-PRIORITY WHEN "HIGH" PERFORM PROCESS-HIGH-PRIORITY WHEN "LOW" PERFORM PROCESS-LOW-PRIORITY END-EVALUATE * Priority EVALUATE WHEN OTHER PERFORM PROCESS-UNKNOWN END-EVALUATE * Status EVALUATE

Each EVALUATE must have its own END-EVALUATE terminator.

Practical Examples

These examples demonstrate how to use the END-EVALUATE clause effectively in different conditional logic scenarios.

Basic Status Evaluation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
IDENTIFICATION DIVISION. PROGRAM-ID. BASIC-EVALUATE-EXAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-STATUS PIC X(10). 01 WS-MESSAGE PIC X(50). PROCEDURE DIVISION. MAIN-PROCESS. * Set status for testing MOVE "ACTIVE" TO WS-STATUS * Evaluate status with proper END-EVALUATE EVALUATE WS-STATUS WHEN "ACTIVE" MOVE "System is active and running" TO WS-MESSAGE DISPLAY WS-MESSAGE WHEN "INACTIVE" MOVE "System is inactive" TO WS-MESSAGE DISPLAY WS-MESSAGE WHEN "ERROR" MOVE "System error detected" TO WS-MESSAGE DISPLAY WS-MESSAGE WHEN OTHER MOVE "Unknown system status" TO WS-MESSAGE DISPLAY WS-MESSAGE END-EVALUATE * Continue with program logic DISPLAY "Processing complete" STOP RUN.

Basic EVALUATE structure with proper END-EVALUATE termination.

Complex Conditional Logic

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
IDENTIFICATION DIVISION. PROGRAM-ID. COMPLEX-EVALUATE-EXAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-AGE PIC 9(3). 01 WS-INCOME PIC 9(8). 01 WS-CATEGORY PIC X(20). PROCEDURE DIVISION. MAIN-PROCESS. * Set test values MOVE 25 TO WS-AGE MOVE 50000 TO WS-INCOME * Complex evaluation with multiple conditions EVALUATE TRUE WHEN WS-AGE < 18 MOVE "Minor" TO WS-CATEGORY WHEN WS-AGE >= 18 AND WS-AGE < 25 IF WS-INCOME < 30000 MOVE "Young Adult - Low Income" TO WS-CATEGORY ELSE MOVE "Young Adult - High Income" TO WS-CATEGORY END-IF WHEN WS-AGE >= 25 AND WS-AGE < 65 EVALUATE WS-INCOME WHEN 0 THRU 30000 MOVE "Working Adult - Low Income" TO WS-CATEGORY WHEN 30001 THRU 75000 MOVE "Working Adult - Middle Income" TO WS-CATEGORY WHEN 75001 THRU 999999 MOVE "Working Adult - High Income" TO WS-CATEGORY WHEN OTHER MOVE "Working Adult - Very High Income" TO WS-CATEGORY END-EVALUATE * Income evaluation WHEN WS-AGE >= 65 MOVE "Senior" TO WS-CATEGORY WHEN OTHER MOVE "Unknown Category" TO WS-CATEGORY END-EVALUATE * Age evaluation DISPLAY "Category: " WS-CATEGORY STOP RUN.

Complex nested EVALUATE with proper END-EVALUATE termination for each level.

Error Handling with EVALUATE

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
IDENTIFICATION DIVISION. PROGRAM-ID. ERROR-HANDLING-EVALUATE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-ERROR-CODE PIC X(2). 01 WS-ERROR-MESSAGE PIC X(100). 01 WS-ACTION PIC X(20). PROCEDURE DIVISION. MAIN-PROCESS. * Simulate different error codes MOVE "01" TO WS-ERROR-CODE * Handle errors with EVALUATE EVALUATE WS-ERROR-CODE WHEN "01" MOVE "File not found - Check file path" TO WS-ERROR-MESSAGE MOVE "RETRY" TO WS-ACTION WHEN "02" MOVE "Invalid data format - Verify input" TO WS-ERROR-MESSAGE MOVE "VALIDATE" TO WS-ACTION WHEN "03" MOVE "Permission denied - Check access rights" TO WS-ERROR-MESSAGE MOVE "CONTACT_ADMIN" TO WS-ACTION WHEN "04" MOVE "Network timeout - Check connection" TO WS-ERROR-MESSAGE MOVE "RETRY" TO WS-ACTION WHEN "05" MOVE "Memory allocation failed - System overloaded" TO WS-ERROR-MESSAGE MOVE "WAIT" TO WS-ACTION WHEN OTHER MOVE "Unknown error - Contact system administrator" TO WS-ERROR-MESSAGE MOVE "CONTACT_SUPPORT" TO WS-ACTION END-EVALUATE * Process the error DISPLAY "Error: " WS-ERROR-MESSAGE DISPLAY "Action: " WS-ACTION * Take action based on error type EVALUATE WS-ACTION WHEN "RETRY" DISPLAY "Attempting to retry operation" WHEN "VALIDATE" DISPLAY "Validating input data" WHEN "CONTACT_ADMIN" DISPLAY "Contacting system administrator" WHEN "WAIT" DISPLAY "Waiting for system resources" WHEN "CONTACT_SUPPORT" DISPLAY "Contacting technical support" WHEN OTHER DISPLAY "Taking default action" END-EVALUATE STOP RUN.

Error handling using nested EVALUATE statements with proper END-EVALUATE termination.

Menu System with EVALUATE

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
IDENTIFICATION DIVISION. PROGRAM-ID. MENU-SYSTEM-EVALUATE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-MENU-CHOICE PIC 9(1). 01 WS-CONTINUE PIC X(1) VALUE "Y". PROCEDURE DIVISION. MAIN-PROCESS. PERFORM UNTIL WS-CONTINUE = "N" * Display menu DISPLAY "=== MENU SYSTEM ===" DISPLAY "1. Add Record" DISPLAY "2. Update Record" DISPLAY "3. Delete Record" DISPLAY "4. View Records" DISPLAY "5. Exit" DISPLAY "Enter choice (1-5): " ACCEPT WS-MENU-CHOICE * Process menu choice with EVALUATE EVALUATE WS-MENU-CHOICE WHEN 1 DISPLAY "Adding new record..." PERFORM ADD-RECORD WHEN 2 DISPLAY "Updating record..." PERFORM UPDATE-RECORD WHEN 3 DISPLAY "Deleting record..." PERFORM DELETE-RECORD WHEN 4 DISPLAY "Viewing records..." PERFORM VIEW-RECORDS WHEN 5 DISPLAY "Exiting program..." MOVE "N" TO WS-CONTINUE WHEN OTHER DISPLAY "Invalid choice. Please try again." END-EVALUATE * Ask if user wants to continue IF WS-CONTINUE = "Y" DISPLAY "Continue? (Y/N): " ACCEPT WS-CONTINUE END-IF END-PERFORM STOP RUN. ADD-RECORD. DISPLAY "Record added successfully". UPDATE-RECORD. DISPLAY "Record updated successfully". DELETE-RECORD. DISPLAY "Record deleted successfully". VIEW-RECORDS. DISPLAY "Records displayed successfully".

Menu system using EVALUATE with proper END-EVALUATE termination.

Best Practices and Considerations

Understanding best practices ensures proper EVALUATE block structure and program flow.

END-EVALUATE Best Practices

  • Always include END-EVALUATE - Required for every EVALUATE block
  • Use proper indentation - Makes nested structures clear
  • Add comments for clarity - Mark which END-EVALUATE belongs to which EVALUATE
  • Test all WHEN paths - Ensure all conditions are properly handled
  • Include WHEN OTHER - Handle unexpected values

Common Pitfalls to Avoid

PitfallProblemSolution
Missing END-EVALUATECompilation errorAlways include END-EVALUATE
Mismatched nestingLogic errorsUse proper indentation and comments
Missing WHEN OTHERUnexpected behaviorInclude WHEN OTHER clause
Poor structureHard to maintainUse consistent formatting
Complex nestingDifficult to debugLimit nesting depth

Structure Guidelines

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
* Good structure with comments EVALUATE WS-STATUS WHEN "ACTIVE" PERFORM PROCESS-ACTIVE WHEN "INACTIVE" PERFORM PROCESS-INACTIVE WHEN OTHER PERFORM PROCESS-UNKNOWN END-EVALUATE * Status evaluation * Nested structure with clear marking EVALUATE WS-CATEGORY WHEN "A" EVALUATE WS-SUBTYPE WHEN "X" PERFORM PROCESS-AX WHEN "Y" PERFORM PROCESS-AY END-EVALUATE * Subtype evaluation WHEN "B" PERFORM PROCESS-B END-EVALUATE * Category evaluation * Avoid excessive nesting * Use separate procedures instead of deep nesting

Proper structure and commenting make EVALUATE blocks easier to understand and maintain.

END-EVALUATE Clause Quick Reference

UsageSyntaxExample
Basic terminationEVALUATE...END-EVALUATEEVALUATE WS-VALUE WHEN 1...END-EVALUATE
With WHEN OTHEREVALUATE...WHEN OTHER...END-EVALUATEEVALUATE WS-STATUS WHEN "A"...WHEN OTHER...END-EVALUATE
Nested structureEVALUATE...EVALUATE...END-EVALUATE...END-EVALUATEEVALUATE A...EVALUATE B...END-EVALUATE...END-EVALUATE
Multiple WHENEVALUATE...WHEN...WHEN...END-EVALUATEEVALUATE WS-CHOICE WHEN 1...WHEN 2...END-EVALUATE
With commentsEND-EVALUATE * CommentEND-EVALUATE * Status evaluation

Test Your Knowledge

1. What is the primary purpose of the END-EVALUATE clause in COBOL?

  • To start an EVALUATE statement
  • To terminate an EVALUATE statement block
  • To evaluate conditions
  • To define variables

2. Which statement does END-EVALUATE terminate?

  • IF statement
  • EVALUATE statement
  • PERFORM statement
  • READ statement

3. What happens if you forget to include END-EVALUATE?

  • The program crashes
  • Compilation error occurs
  • The EVALUATE block continues indefinitely
  • Nothing happens

4. Can you nest EVALUATE statements?

  • No, never
  • Yes, but only two levels deep
  • Yes, with proper END-EVALUATE termination
  • Only in certain COBOL versions

5. What comes after END-EVALUATE?

  • Another EVALUATE statement
  • A period (.)
  • Any valid COBOL statement
  • Only STOP RUN

Frequently Asked Questions