The THEN keyword in COBOL is used in conditional statements to specify actions that should be executed when a condition evaluates to true. It is a fundamental component of decision-making and flow control in COBOL programs.
THEN and ELSE work together to provide complete conditional execution logic.
THEN is used in the PROCEDURE DIVISION as part of IF-THEN conditional statements to control program flow and implement decision logic.
12345678910111213141516171819202122232425262728293031323334353637* Basic THEN syntax examples PROCEDURE DIVISION. * Simple IF-THEN statement IF CUSTOMER-BALANCE > 1000 THEN PERFORM PREMIUM-PROCESSING END-IF * IF-THEN-ELSE statement IF CUSTOMER-STATUS = 'A' THEN PERFORM ACTIVE-CUSTOMER-PROCESSING ELSE PERFORM INACTIVE-CUSTOMER-PROCESSING END-IF * Multiple statements in THEN IF TRANSACTION-AMOUNT > 5000 THEN MOVE 'HIGH-VALUE' TO TRANSACTION-TYPE PERFORM HIGH-VALUE-PROCESSING DISPLAY "High value transaction processed" END-IF * Nested IF-THEN statements IF CUSTOMER-TYPE = 'GOLD' THEN IF CUSTOMER-BALANCE > 10000 THEN PERFORM VIP-PROCESSING ELSE PERFORM STANDARD-GOLD-PROCESSING END-IF ELSE PERFORM REGULAR-PROCESSING END-IF
Basic THEN usage in conditional statements for decision making.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102* Complete COBOL program demonstrating THEN usage IDENTIFICATION DIVISION. PROGRAM-ID. THEN-DEMO. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-DATA. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-BALANCE PIC 9(8)V99. 05 CUSTOMER-STATUS PIC X. 05 CUSTOMER-TYPE PIC X(10). 01 PROCESSING-RESULTS. 05 PROCESSING-TYPE PIC X(20). 05 DISCOUNT-RATE PIC 9(3)V99. 05 PROCESSING-STATUS PIC X(10). PROCEDURE DIVISION. MAIN-LOGIC. PERFORM INITIALIZE-PROCESSING PERFORM PROCESS-CUSTOMER-DATA PERFORM DISPLAY-PROCESSING-RESULTS STOP RUN. INITIALIZE-PROCESSING. MOVE 123456 TO CUSTOMER-ID MOVE "John Smith" TO CUSTOMER-NAME MOVE 15000.50 TO CUSTOMER-BALANCE MOVE 'A' TO CUSTOMER-STATUS MOVE "GOLD" TO CUSTOMER-TYPE. PROCESS-CUSTOMER-DATA. * Process based on customer status IF CUSTOMER-STATUS = 'A' THEN PERFORM PROCESS-ACTIVE-CUSTOMER ELSE PERFORM PROCESS-INACTIVE-CUSTOMER END-IF. PROCESS-ACTIVE-CUSTOMER. * Process based on customer type IF CUSTOMER-TYPE = 'GOLD' THEN IF CUSTOMER-BALANCE > 10000 THEN MOVE 'VIP-PROCESSING' TO PROCESSING-TYPE MOVE 0.15 TO DISCOUNT-RATE PERFORM VIP-CUSTOMER-PROCESSING ELSE MOVE 'GOLD-PROCESSING' TO PROCESSING-TYPE MOVE 0.10 TO DISCOUNT-RATE PERFORM GOLD-CUSTOMER-PROCESSING END-IF ELSE IF CUSTOMER-TYPE = 'SILVER' THEN MOVE 'SILVER-PROCESSING' TO PROCESSING-TYPE MOVE 0.05 TO DISCOUNT-RATE PERFORM SILVER-CUSTOMER-PROCESSING ELSE MOVE 'STANDARD-PROCESSING' TO PROCESSING-TYPE MOVE 0.02 TO DISCOUNT-RATE PERFORM STANDARD-CUSTOMER-PROCESSING END-IF END-IF. PROCESS-INACTIVE-CUSTOMER. MOVE 'INACTIVE-PROCESSING' TO PROCESSING-TYPE MOVE 0.00 TO DISCOUNT-RATE PERFORM INACTIVE-CUSTOMER-PROCESSING. VIP-CUSTOMER-PROCESSING. DISPLAY "Processing VIP customer: " CUSTOMER-NAME MOVE 'COMPLETED' TO PROCESSING-STATUS. GOLD-CUSTOMER-PROCESSING. DISPLAY "Processing Gold customer: " CUSTOMER-NAME MOVE 'COMPLETED' TO PROCESSING-STATUS. SILVER-CUSTOMER-PROCESSING. DISPLAY "Processing Silver customer: " CUSTOMER-NAME MOVE 'COMPLETED' TO PROCESSING-STATUS. STANDARD-CUSTOMER-PROCESSING. DISPLAY "Processing Standard customer: " CUSTOMER-NAME MOVE 'COMPLETED' TO PROCESSING-STATUS. INACTIVE-CUSTOMER-PROCESSING. DISPLAY "Processing Inactive customer: " CUSTOMER-NAME MOVE 'COMPLETED' TO PROCESSING-STATUS. DISPLAY-PROCESSING-RESULTS. DISPLAY "=== PROCESSING RESULTS ===" DISPLAY "Customer ID: " CUSTOMER-ID DISPLAY "Customer Name: " CUSTOMER-NAME DISPLAY "Processing Type: " PROCESSING-TYPE DISPLAY "Discount Rate: " DISCOUNT-RATE DISPLAY "Processing Status: " PROCESSING-STATUS.
The program demonstrates comprehensive THEN usage in decision making.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192* Advanced THEN usage with complex conditional logic PROCEDURE DIVISION. ADVANCED-THEN-OPERATIONS. PERFORM COMPLEX-DECISION-MAKING PERFORM CONDITIONAL-DATA-PROCESSING PERFORM ERROR-HANDLING-LOGIC PERFORM BUSINESS-RULE-IMPLEMENTATION. COMPLEX-DECISION-MAKING. * Complex nested conditions with THEN IF CUSTOMER-AGE >= 18 THEN IF CUSTOMER-INCOME > 50000 THEN IF CUSTOMER-CREDIT-SCORE > 700 THEN PERFORM APPROVE-LOAN MOVE 'APPROVED' TO LOAN-STATUS ELSE PERFORM REVIEW-LOAN MOVE 'UNDER-REVIEW' TO LOAN-STATUS END-IF ELSE PERFORM DENY-LOAN MOVE 'DENIED' TO LOAN-STATUS END-IF ELSE PERFORM MINOR-APPLICATION-PROCESSING MOVE 'MINOR' TO LOAN-STATUS END-IF. CONDITIONAL-DATA-PROCESSING. * Conditional data processing with THEN IF TRANSACTION-TYPE = 'DEPOSIT' THEN IF TRANSACTION-AMOUNT > 10000 THEN PERFORM LARGE-DEPOSIT-PROCESSING MOVE 'LARGE-DEPOSIT' TO TRANSACTION-CATEGORY ELSE PERFORM STANDARD-DEPOSIT-PROCESSING MOVE 'STANDARD-DEPOSIT' TO TRANSACTION-CATEGORY END-IF ELSE IF TRANSACTION-TYPE = 'WITHDRAWAL' THEN IF TRANSACTION-AMOUNT > ACCOUNT-BALANCE THEN PERFORM INSUFFICIENT-FUNDS-PROCESSING MOVE 'INSUFFICIENT-FUNDS' TO TRANSACTION-CATEGORY ELSE PERFORM STANDARD-WITHDRAWAL-PROCESSING MOVE 'STANDARD-WITHDRAWAL' TO TRANSACTION-CATEGORY END-IF ELSE PERFORM UNKNOWN-TRANSACTION-PROCESSING MOVE 'UNKNOWN' TO TRANSACTION-CATEGORY END-IF. ERROR-HANDLING-LOGIC. * Error handling with THEN IF FILE-STATUS NOT = '00' THEN IF FILE-STATUS = '10' THEN PERFORM END-OF-FILE-PROCESSING ELSE IF FILE-STATUS = '23' THEN PERFORM FILE-NOT-FOUND-PROCESSING ELSE PERFORM GENERAL-ERROR-PROCESSING END-IF ELSE PERFORM NORMAL-FILE-PROCESSING END-IF. BUSINESS-RULE-IMPLEMENTATION. * Business rules with THEN IF ORDER-AMOUNT > 1000 THEN IF CUSTOMER-TYPE = 'PREMIUM' THEN MOVE 0.15 TO DISCOUNT-RATE PERFORM PREMIUM-DISCOUNT-PROCESSING ELSE MOVE 0.10 TO DISCOUNT-RATE PERFORM STANDARD-DISCOUNT-PROCESSING END-IF ELSE MOVE 0.00 TO DISCOUNT-RATE PERFORM NO-DISCOUNT-PROCESSING END-IF.
Advanced THEN usage with complex conditional logic and decision making.
THEN is essential in various scenarios where conditional processing, decision making, and flow control are required.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374* Business logic implementation using THEN IDENTIFICATION DIVISION. PROGRAM-ID. BUSINESS-LOGIC-THEN. DATA DIVISION. WORKING-STORAGE SECTION. 01 BUSINESS-DATA. 05 ORDER-AMOUNT PIC 9(8)V99. 05 CUSTOMER-TYPE PIC X(10). 05 PAYMENT-METHOD PIC X(10). 05 SHIPPING-REGION PIC X(20). 01 BUSINESS-RESULTS. 05 DISCOUNT-RATE PIC 9(3)V99. 05 SHIPPING-COST PIC 9(6)V99. 05 PROCESSING-TYPE PIC X(20). PROCEDURE DIVISION. MAIN-LOGIC. PERFORM CALCULATE-BUSINESS-RULES PERFORM APPLY-BUSINESS-LOGIC PERFORM DISPLAY-BUSINESS-RESULTS STOP RUN. CALCULATE-BUSINESS-RULES. * Calculate discount based on order amount and customer type IF ORDER-AMOUNT > 1000 THEN IF CUSTOMER-TYPE = 'PREMIUM' THEN MOVE 0.15 TO DISCOUNT-RATE MOVE 'PREMIUM-DISCOUNT' TO PROCESSING-TYPE ELSE IF CUSTOMER-TYPE = 'REGULAR' THEN MOVE 0.10 TO DISCOUNT-RATE MOVE 'REGULAR-DISCOUNT' TO PROCESSING-TYPE ELSE MOVE 0.05 TO DISCOUNT-RATE MOVE 'STANDARD-DISCOUNT' TO PROCESSING-TYPE END-IF ELSE MOVE 0.00 TO DISCOUNT-RATE MOVE 'NO-DISCOUNT' TO PROCESSING-TYPE END-IF. APPLY-BUSINESS-LOGIC. * Apply shipping costs based on region and payment method IF SHIPPING-REGION = 'INTERNATIONAL' THEN IF PAYMENT-METHOD = 'CREDIT-CARD' THEN MOVE 50.00 TO SHIPPING-COST ELSE MOVE 75.00 TO SHIPPING-COST END-IF ELSE IF SHIPPING-REGION = 'DOMESTIC' THEN IF ORDER-AMOUNT > 500 THEN MOVE 0.00 TO SHIPPING-COST ELSE MOVE 10.00 TO SHIPPING-COST END-IF ELSE MOVE 25.00 TO SHIPPING-COST END-IF. DISPLAY-BUSINESS-RESULTS. DISPLAY "=== BUSINESS LOGIC RESULTS ===" DISPLAY "Order Amount: $" ORDER-AMOUNT DISPLAY "Customer Type: " CUSTOMER-TYPE DISPLAY "Processing Type: " PROCESSING-TYPE DISPLAY "Discount Rate: " DISCOUNT-RATE DISPLAY "Shipping Cost: $" SHIPPING-COST.
Business logic implementation uses THEN for decision making and rule processing.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697* Data validation and processing using THEN IDENTIFICATION DIVISION. PROGRAM-ID. DATA-VALIDATION-THEN. DATA DIVISION. WORKING-STORAGE SECTION. 01 VALIDATION-DATA. 05 INPUT-VALUE PIC X(50). 05 DATA-TYPE PIC X(10). 05 VALIDATION-RULE PIC X(20). 01 VALIDATION-RESULTS. 05 IS-VALID PIC X. 05 ERROR-MESSAGE PIC X(100). 05 PROCESSING-ACTION PIC X(20). PROCEDURE DIVISION. MAIN-LOGIC. PERFORM VALIDATE-INPUT-DATA PERFORM PROCESS-VALIDATED-DATA PERFORM DISPLAY-VALIDATION-RESULTS STOP RUN. VALIDATE-INPUT-DATA. * Validate data based on type and rules IF DATA-TYPE = 'NUMERIC' THEN IF INPUT-VALUE IS NUMERIC THEN MOVE 'Y' TO IS-VALID MOVE 'PROCESS-NUMERIC' TO PROCESSING-ACTION ELSE MOVE 'N' TO IS-VALID MOVE "Input must be numeric" TO ERROR-MESSAGE END-IF ELSE IF DATA-TYPE = 'ALPHABETIC' THEN IF INPUT-VALUE IS ALPHABETIC THEN MOVE 'Y' TO IS-VALID MOVE 'PROCESS-ALPHABETIC' TO PROCESSING-ACTION ELSE MOVE 'N' TO IS-VALID MOVE "Input must be alphabetic" TO ERROR-MESSAGE END-IF ELSE IF DATA-TYPE = 'EMAIL' THEN IF INPUT-VALUE CONTAINS '@' THEN MOVE 'Y' TO IS-VALID MOVE 'PROCESS-EMAIL' TO PROCESSING-ACTION ELSE MOVE 'N' TO IS-VALID MOVE "Invalid email format" TO ERROR-MESSAGE END-IF ELSE MOVE 'N' TO IS-VALID MOVE "Unknown data type" TO ERROR-MESSAGE END-IF END-IF. PROCESS-VALIDATED-DATA. * Process data based on validation results IF IS-VALID = 'Y' THEN IF PROCESSING-ACTION = 'PROCESS-NUMERIC' THEN PERFORM NUMERIC-DATA-PROCESSING ELSE IF PROCESSING-ACTION = 'PROCESS-ALPHABETIC' THEN PERFORM ALPHABETIC-DATA-PROCESSING ELSE IF PROCESSING-ACTION = 'PROCESS-EMAIL' THEN PERFORM EMAIL-DATA-PROCESSING END-IF ELSE PERFORM ERROR-HANDLING END-IF. NUMERIC-DATA-PROCESSING. DISPLAY "Processing numeric data: " INPUT-VALUE. ALPHABETIC-DATA-PROCESSING. DISPLAY "Processing alphabetic data: " INPUT-VALUE. EMAIL-DATA-PROCESSING. DISPLAY "Processing email data: " INPUT-VALUE. ERROR-HANDLING. DISPLAY "Error: " ERROR-MESSAGE. DISPLAY-VALIDATION-RESULTS. DISPLAY "=== VALIDATION RESULTS ===" DISPLAY "Input Value: " INPUT-VALUE DISPLAY "Data Type: " DATA-TYPE DISPLAY "Is Valid: " IS-VALID DISPLAY "Processing Action: " PROCESSING-ACTION.
Data validation and processing uses THEN for conditional data handling.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113* Error handling and recovery using THEN IDENTIFICATION DIVISION. PROGRAM-ID. ERROR-HANDLING-THEN. DATA DIVISION. WORKING-STORAGE SECTION. 01 ERROR-DATA. 05 ERROR-CODE PIC 9(4). 05 ERROR-TYPE PIC X(20). 05 ERROR-SEVERITY PIC X(10). 01 RECOVERY-ACTIONS. 05 RECOVERY-ACTION PIC X(30). 05 RETRY-COUNT PIC 9(2). 05 MAX-RETRIES PIC 9(2) VALUE 3. PROCEDURE DIVISION. MAIN-LOGIC. PERFORM HANDLE-ERROR-SCENARIOS PERFORM IMPLEMENT-RECOVERY-LOGIC PERFORM DISPLAY-ERROR-RESULTS STOP RUN. HANDLE-ERROR-SCENARIOS. * Handle different error scenarios with THEN IF ERROR-CODE = 1001 THEN MOVE 'FILE-ERROR' TO ERROR-TYPE IF ERROR-SEVERITY = 'CRITICAL' THEN PERFORM CRITICAL-FILE-ERROR-HANDLING ELSE PERFORM NON-CRITICAL-FILE-ERROR-HANDLING END-IF ELSE IF ERROR-CODE = 2001 THEN MOVE 'DATABASE-ERROR' TO ERROR-TYPE IF RETRY-COUNT < MAX-RETRIES THEN PERFORM RETRY-DATABASE-OPERATION ELSE PERFORM ESCALATE-DATABASE-ERROR END-IF ELSE IF ERROR-CODE = 3001 THEN MOVE 'NETWORK-ERROR' TO ERROR-TYPE IF ERROR-SEVERITY = 'TEMPORARY' THEN PERFORM TEMPORARY-NETWORK-ERROR-HANDLING ELSE PERFORM PERMANENT-NETWORK-ERROR-HANDLING END-IF ELSE MOVE 'UNKNOWN-ERROR' TO ERROR-TYPE PERFORM UNKNOWN-ERROR-HANDLING END-IF END-IF. IMPLEMENT-RECOVERY-LOGIC. * Implement recovery logic based on error type IF ERROR-TYPE = 'FILE-ERROR' THEN IF ERROR-SEVERITY = 'CRITICAL' THEN MOVE 'RESTORE-FROM-BACKUP' TO RECOVERY-ACTION PERFORM CRITICAL-RECOVERY-PROCEDURE ELSE MOVE 'CREATE-NEW-FILE' TO RECOVERY-ACTION PERFORM NON-CRITICAL-RECOVERY-PROCEDURE END-IF ELSE IF ERROR-TYPE = 'DATABASE-ERROR' THEN MOVE 'RETRY-OPERATION' TO RECOVERY-ACTION PERFORM DATABASE-RECOVERY-PROCEDURE ELSE IF ERROR-TYPE = 'NETWORK-ERROR' THEN MOVE 'SWITCH-TO-BACKUP' TO RECOVERY-ACTION PERFORM NETWORK-RECOVERY-PROCEDURE ELSE MOVE 'LOG-AND-CONTINUE' TO RECOVERY-ACTION PERFORM UNKNOWN-RECOVERY-PROCEDURE END-IF END-IF. CRITICAL-FILE-ERROR-HANDLING. DISPLAY "Critical file error detected - initiating recovery". NON-CRITICAL-FILE-ERROR-HANDLING. DISPLAY "Non-critical file error - continuing with processing". RETRY-DATABASE-OPERATION. ADD 1 TO RETRY-COUNT DISPLAY "Retrying database operation - attempt " RETRY-COUNT. ESCALATE-DATABASE-ERROR. DISPLAY "Database error escalated - maximum retries exceeded". TEMPORARY-NETWORK-ERROR-HANDLING. DISPLAY "Temporary network error - waiting for recovery". PERMANENT-NETWORK-ERROR-HANDLING. DISPLAY "Permanent network error - switching to backup". UNKNOWN-ERROR-HANDLING. DISPLAY "Unknown error encountered - logging for analysis". DISPLAY-ERROR-RESULTS. DISPLAY "=== ERROR HANDLING RESULTS ===" DISPLAY "Error Code: " ERROR-CODE DISPLAY "Error Type: " ERROR-TYPE DISPLAY "Error Severity: " ERROR-SEVERITY DISPLAY "Recovery Action: " RECOVERY-ACTION DISPLAY "Retry Count: " RETRY-COUNT.
Error handling and recovery uses THEN for conditional error processing.
Following these best practices ensures effective use of THEN in COBOL applications for better readability and maintainability.
Pattern | Usage | Example |
---|---|---|
Simple IF-THEN | Single condition with one action | IF condition THEN action END-IF |
IF-THEN-ELSE | Two-way decision making | IF condition THEN action1 ELSE action2 END-IF |
Nested IF-THEN | Complex decision logic | IF A THEN IF B THEN ACTION END-IF END-IF |
Multiple Conditions | Multiple condition checking | IF condition1 AND condition2 THEN action END-IF |
Conditional Processing | Conditional subroutine calls | IF condition THEN PERFORM subroutine END-IF |
Error Handling | Conditional error processing | IF error-condition THEN PERFORM error-handling END-IF |
Aspect | Description | Example |
---|---|---|
Location | PROCEDURE DIVISION | In conditional statements |
Basic Syntax | IF condition THEN action END-IF | IF A > B THEN MOVE A TO RESULT END-IF |
With ELSE | IF condition THEN action1 ELSE action2 END-IF | IF VALID THEN PROCESS ELSE ERROR END-IF |
Nested | Nested IF-THEN statements | IF A THEN IF B THEN ACTION END-IF END-IF |
Multiple Actions | Multiple statements in THEN | IF A > B THEN MOVE A TO RESULT DISPLAY "Done" END-IF |
1. What is the primary purpose of THEN in COBOL?
2. Where is THEN typically used in a COBOL program?
3. What types of operations can THEN handle?
4. How does THEN differ from ELSE in IF statements?
5. Which of the following is a common use of THEN?