COBOL standards define the official specifications for the COBOL programming language, ensuring consistency, portability, and compatibility across different systems and implementations. Understanding these standards is crucial for writing maintainable, portable COBOL code that can run on various platforms and be easily maintained by different developers.
COBOL standards are developed by international organizations like ISO and ANSI to provide a common specification that all COBOL implementations should follow. These standards evolve over time, adding new features while maintaining backward compatibility. Following standards ensures that your code will work across different systems and can be maintained by any COBOL programmer familiar with the standard.
The original COBOL standard was developed in 1960 by the Conference on Data Systems Languages (CODASYL). This established the basic structure and syntax that all subsequent standards have built upon. While primitive by today's standards, it introduced the fundamental concepts that make COBOL readable and business-oriented.
12345678910111213141516171819202122232425IDENTIFICATION DIVISION. PROGRAM-ID. ORIGINAL-COBOL-EXAMPLE. *> This demonstrates the original COBOL-60 structure *> Note the basic division structure that remains today ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-360. OBJECT-COMPUTER. IBM-360. DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-RECORD. 05 CUSTOMER-NUMBER PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-BALANCE PIC 9(8)V99. PROCEDURE DIVISION. MAIN-PROCEDURE. MOVE 123456 TO CUSTOMER-NUMBER MOVE 'JOHN SMITH' TO CUSTOMER-NAME MOVE 1500.75 TO CUSTOMER-BALANCE DISPLAY 'CUSTOMER: ' CUSTOMER-NUMBER ' ' CUSTOMER-NAME DISPLAY 'BALANCE: ' CUSTOMER-BALANCE STOP RUN.
The original COBOL-60 standard established the four-division structure (IDENTIFICATION, ENVIRONMENT, DATA, PROCEDURE) that remains fundamental to COBOL today. It introduced the concept of level numbers for data hierarchy, picture clauses for data formatting, and the basic control structures. While limited compared to modern standards, it provided a solid foundation for business programming.
The 1974 ANSI standard added significant improvements including better file handling, enhanced arithmetic operations, and improved debugging capabilities. This standard made COBOL more robust and suitable for larger, more complex business applications.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748IDENTIFICATION DIVISION. PROGRAM-ID. COBOL74-EXAMPLE. *> COBOL-74 introduced enhanced file handling and debugging ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO 'CUSTOMER.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS FILE-STATUS. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUSTOMER-NUMBER PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-BALANCE PIC 9(8)V99. WORKING-STORAGE SECTION. 01 FILE-STATUS PIC XX. 88 FILE-OK VALUE '00'. 88 FILE-EOF VALUE '10'. 88 FILE-ERROR VALUE '99'. 01 RECORD-COUNT PIC 9(6) VALUE 0. PROCEDURE DIVISION. MAIN-PROCEDURE. OPEN INPUT CUSTOMER-FILE IF NOT FILE-OK DISPLAY 'ERROR OPENING FILE: ' FILE-STATUS STOP RUN END-IF PERFORM READ-CUSTOMER-RECORDS UNTIL FILE-EOF CLOSE CUSTOMER-FILE DISPLAY 'TOTAL RECORDS PROCESSED: ' RECORD-COUNT STOP RUN. READ-CUSTOMER-RECORDS. READ CUSTOMER-FILE AT END SET FILE-EOF TO TRUE NOT AT END ADD 1 TO RECORD-COUNT DISPLAY 'CUSTOMER: ' CUSTOMER-NUMBER ' ' CUSTOMER-NAME END-READ.
COBOL-74 introduced the FILE-CONTROL paragraph for better file management, FILE STATUS clauses for error handling, and improved READ statement syntax with AT END and NOT AT END clauses. These enhancements made file processing more reliable and easier to debug, which was crucial for business applications that heavily rely on data files.
The 1985 ANSI standard was a major milestone that introduced structured programming features to COBOL. This included END-IF, END-PERFORM, and other scope terminators that made COBOL code more readable and maintainable. It also added improved control structures and better error handling.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566IDENTIFICATION DIVISION. PROGRAM-ID. COBOL85-EXAMPLE. *> COBOL-85 introduced structured programming features DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-DATA. 05 CUSTOMER-NUMBER PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-BALANCE PIC 9(8)V99. 05 ACCOUNT-TYPE PIC X(1). 88 CHECKING VALUE 'C'. 88 SAVINGS VALUE 'S'. 01 PROCESSING-CONTROLS. 05 RECORD-COUNT PIC 9(6) VALUE 0. 05 TOTAL-BALANCE PIC 9(12)V99 VALUE 0. 05 AVERAGE-BALANCE PIC 9(8)V99 VALUE 0. PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM INITIALIZE-PROCESSING PERFORM PROCESS-CUSTOMER-DATA PERFORM CALCULATE-STATISTICS PERFORM DISPLAY-RESULTS STOP RUN. INITIALIZE-PROCESSING. MOVE 0 TO RECORD-COUNT MOVE 0 TO TOTAL-BALANCE DISPLAY 'Starting customer data processing'. PROCESS-CUSTOMER-DATA. PERFORM VARYING CUSTOMER-NUMBER FROM 100001 BY 1 UNTIL CUSTOMER-NUMBER > 100010 PERFORM PROCESS-SINGLE-CUSTOMER END-PERFORM. PROCESS-SINGLE-CUSTOMER. ADD 1 TO RECORD-COUNT *> Simulate different account types and balances IF CUSTOMER-NUMBER MOD 2 = 0 SET CHECKING TO TRUE MOVE 2500.00 TO CUSTOMER-BALANCE ELSE SET SAVINGS TO TRUE MOVE 5000.00 TO CUSTOMER-BALANCE END-IF ADD CUSTOMER-BALANCE TO TOTAL-BALANCE DISPLAY 'Customer ' CUSTOMER-NUMBER ' processed'. CALCULATE-STATISTICS. IF RECORD-COUNT > 0 COMPUTE AVERAGE-BALANCE = TOTAL-BALANCE / RECORD-COUNT ELSE MOVE 0 TO AVERAGE-BALANCE END-IF. DISPLAY-RESULTS. DISPLAY 'Processing complete' DISPLAY 'Records processed: ' RECORD-COUNT DISPLAY 'Total balance: ' TOTAL-BALANCE DISPLAY 'Average balance: ' AVERAGE-BALANCE.
COBOL-85 introduced scope terminators (END-IF, END-PERFORM) that make code much more readable and maintainable. The PERFORM VARYING statement provides structured loops, and the improved IF-THEN-ELSE structure eliminates the need for GO TO statements in most cases. These features made COBOL code more structured and easier to understand, following modern programming principles.
The 2002 ISO standard brought object-oriented programming capabilities to COBOL, including classes, objects, inheritance, and polymorphism. This was a major evolution that allowed COBOL to compete with modern programming languages while maintaining its business-oriented focus.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960IDENTIFICATION DIVISION. CLASS-ID. BANK-ACCOUNT. *> COBOL-2002 introduced object-oriented programming DATA DIVISION. WORKING-STORAGE SECTION. 01 ACCOUNT-NUMBER PIC 9(10). 01 ACCOUNT-HOLDER PIC X(50). 01 ACCOUNT-BALANCE PIC 9(10)V99. 01 ACCOUNT-TYPE PIC X(10). PROCEDURE DIVISION. METHOD-ID. INITIALIZE-ACCOUNT. DATA DIVISION. LINKAGE SECTION. 01 ACCOUNT-NUM PIC 9(10). 01 HOLDER-NAME PIC X(50). 01 INITIAL-BALANCE PIC 9(10)V99. PROCEDURE DIVISION USING ACCOUNT-NUM HOLDER-NAME INITIAL-BALANCE. MOVE ACCOUNT-NUM TO ACCOUNT-NUMBER MOVE HOLDER-NAME TO ACCOUNT-HOLDER MOVE INITIAL-BALANCE TO ACCOUNT-BALANCE MOVE 'CHECKING' TO ACCOUNT-TYPE END METHOD INITIALIZE-ACCOUNT. METHOD-ID. DEPOSIT. DATA DIVISION. LINKAGE SECTION. 01 DEPOSIT-AMOUNT PIC 9(8)V99. 01 TRANSACTION-SUCCESS PIC X(1). 88 SUCCESS VALUE 'Y'. 88 FAILURE VALUE 'N'. PROCEDURE DIVISION USING DEPOSIT-AMOUNT RETURNING TRANSACTION-SUCCESS. IF DEPOSIT-AMOUNT > 0 ADD DEPOSIT-AMOUNT TO ACCOUNT-BALANCE SET SUCCESS TO TRUE ELSE SET FAILURE TO TRUE END-IF END METHOD DEPOSIT. METHOD-ID. GET-BALANCE. DATA DIVISION. LINKAGE SECTION. 01 CURRENT-BALANCE PIC 9(10)V99. PROCEDURE DIVISION RETURNING CURRENT-BALANCE. MOVE ACCOUNT-BALANCE TO CURRENT-BALANCE END METHOD GET-BALANCE. END CLASS BANK-ACCOUNT.
COBOL-2002 introduced the CLASS-ID statement for defining classes, METHOD-ID for defining methods, and the INVOKE statement for calling methods on objects. This brought modern object-oriented programming concepts to COBOL while maintaining the language's readability and business focus. The standard also included improved string handling and enhanced arithmetic operations.
The 2014 ISO standard is the most recent and includes enhanced object-oriented features, improved Unicode support, better integration capabilities, and modern programming practices. It represents the current state of the COBOL language and provides the foundation for future development.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121IDENTIFICATION DIVISION. CLASS-ID. MODERN-BANK-ACCOUNT. *> COBOL-2014 includes enhanced OOP features and modern constructs DATA DIVISION. WORKING-STORAGE SECTION. 01 ACCOUNT-DATA. 05 ACCOUNT-NUMBER PIC 9(10). 05 ACCOUNT-HOLDER PIC X(50). 05 ACCOUNT-BALANCE PIC 9(10)V99. 05 ACCOUNT-TYPE PIC X(10). 05 CREATION-DATE PIC X(10). 05 LAST-TRANSACTION-DATE PIC X(10). 01 TRANSACTION-LOG. 05 LOG-ENTRY OCCURS 100 TIMES. 10 TRANSACTION-DATE PIC X(10). 10 TRANSACTION-TYPE PIC X(1). 10 TRANSACTION-AMOUNT PIC 9(8)V99. 10 TRANSACTION-DESC PIC X(30). PROCEDURE DIVISION. METHOD-ID. INITIALIZE-ACCOUNT. DATA DIVISION. LINKAGE SECTION. 01 ACCOUNT-NUM PIC 9(10). 01 HOLDER-NAME PIC X(50). 01 INITIAL-BALANCE PIC 9(10)V99. 01 ACCOUNT-TYPE-PARAM PIC X(10). PROCEDURE DIVISION USING ACCOUNT-NUM HOLDER-NAME INITIAL-BALANCE ACCOUNT-TYPE-PARAM. MOVE ACCOUNT-NUM TO ACCOUNT-NUMBER MOVE HOLDER-NAME TO ACCOUNT-HOLDER MOVE INITIAL-BALANCE TO ACCOUNT-BALANCE MOVE ACCOUNT-TYPE-PARAM TO ACCOUNT-TYPE *> Use intrinsic functions for date handling MOVE FUNCTION CURRENT-DATE(1:10) TO CREATION-DATE MOVE FUNCTION CURRENT-DATE(1:10) TO LAST-TRANSACTION-DATE DISPLAY 'Account initialized: ' ACCOUNT-NUMBER END METHOD INITIALIZE-ACCOUNT. METHOD-ID. PROCESS-TRANSACTION. DATA DIVISION. LINKAGE SECTION. 01 TRANSACTION-TYPE PIC X(1). 88 DEPOSIT VALUE 'D'. 88 WITHDRAWAL VALUE 'W'. 01 TRANSACTION-AMOUNT PIC 9(8)V99. 01 TRANSACTION-DESC PIC X(30). 01 TRANSACTION-SUCCESS PIC X(1). 88 SUCCESS VALUE 'Y'. 88 FAILURE VALUE 'N'. PROCEDURE DIVISION USING TRANSACTION-TYPE TRANSACTION-AMOUNT TRANSACTION-DESC RETURNING TRANSACTION-SUCCESS. *> Log the transaction PERFORM LOG-TRANSACTION *> Process based on transaction type EVALUATE TRUE WHEN DEPOSIT IF TRANSACTION-AMOUNT > 0 ADD TRANSACTION-AMOUNT TO ACCOUNT-BALANCE SET SUCCESS TO TRUE ELSE SET FAILURE TO TRUE END-IF WHEN WITHDRAWAL IF TRANSACTION-AMOUNT <= ACCOUNT-BALANCE AND TRANSACTION-AMOUNT > 0 SUBTRACT TRANSACTION-AMOUNT FROM ACCOUNT-BALANCE SET SUCCESS TO TRUE ELSE SET FAILURE TO TRUE END-IF WHEN OTHER SET FAILURE TO TRUE END-EVALUATE *> Update last transaction date MOVE FUNCTION CURRENT-DATE(1:10) TO LAST-TRANSACTION-DATE END METHOD PROCESS-TRANSACTION. METHOD-ID. LOG-TRANSACTION. DATA DIVISION. LINKAGE SECTION. 01 TRANSACTION-TYPE PIC X(1). 01 TRANSACTION-AMOUNT PIC 9(8)V99. 01 TRANSACTION-DESC PIC X(30). PROCEDURE DIVISION USING TRANSACTION-TYPE TRANSACTION-AMOUNT TRANSACTION-DESC. *> Find next available log entry PERFORM VARYING LOG-INDEX FROM 1 BY 1 UNTIL LOG-INDEX > 100 OR LOG-ENTRY(LOG-INDEX) = SPACES CONTINUE END-PERFORM *> Add transaction to log IF LOG-INDEX <= 100 MOVE FUNCTION CURRENT-DATE(1:10) TO TRANSACTION-DATE(LOG-INDEX) MOVE TRANSACTION-TYPE TO TRANSACTION-TYPE(LOG-INDEX) MOVE TRANSACTION-AMOUNT TO TRANSACTION-AMOUNT(LOG-INDEX) MOVE TRANSACTION-DESC TO TRANSACTION-DESC(LOG-INDEX) END-IF END METHOD LOG-TRANSACTION. END CLASS MODERN-BANK-ACCOUNT.
COBOL-2014 includes enhanced intrinsic functions like FUNCTION CURRENT-DATE for better date handling, improved EVALUATE statements for cleaner conditional logic, and better support for modern programming practices. The standard also includes enhanced Unicode support and improved integration capabilities for working with modern systems and databases.
Writing standards-compliant COBOL code ensures portability, maintainability, and compatibility across different systems. This involves following the official syntax rules, using approved language constructs, and avoiding vendor-specific extensions that might not be available on other platforms.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879IDENTIFICATION DIVISION. PROGRAM-ID. STANDARDS-COMPLIANT-EXAMPLE. AUTHOR. JOHN DOE. DATE-WRITTEN. 2024-01-15. *> Following COBOL-2014 standard for maximum compatibility ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-390. OBJECT-COMPUTER. IBM-390. DATA DIVISION. WORKING-STORAGE SECTION. *> Use standard data types and picture clauses 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(8). 05 CUSTOMER-NAME PIC X(50). 05 CUSTOMER-ADDRESS. 10 STREET-ADDRESS PIC X(40). 10 CITY PIC X(20). 10 STATE PIC X(2). 10 ZIP-CODE PIC X(10). 05 CUSTOMER-BALANCE PIC 9(10)V99. 05 ACCOUNT-STATUS PIC X(1). 88 ACTIVE VALUE 'A'. 88 INACTIVE VALUE 'I'. 88 SUSPENDED VALUE 'S'. *> Use standard 88-level conditions 01 PROCESSING-CONTROLS. 05 RECORD-COUNT PIC 9(6) VALUE ZERO. 05 TOTAL-BALANCE PIC 9(12)V99 VALUE ZERO. 05 END-OF-FILE PIC X(1) VALUE 'N'. 88 EOF VALUE 'Y'. 88 NOT-EOF VALUE 'N'. PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM INITIALIZE-PROCESSING PERFORM PROCESS-CUSTOMERS PERFORM DISPLAY-SUMMARY STOP RUN. INITIALIZE-PROCESSING. MOVE ZERO TO RECORD-COUNT MOVE ZERO TO TOTAL-BALANCE SET NOT-EOF TO TRUE DISPLAY 'Starting customer processing'. PROCESS-CUSTOMERS. PERFORM VARYING CUSTOMER-ID FROM 10000001 BY 1 UNTIL CUSTOMER-ID > 10000010 PERFORM PROCESS-SINGLE-CUSTOMER END-PERFORM. PROCESS-SINGLE-CUSTOMER. ADD 1 TO RECORD-COUNT *> Use standard conditional logic EVALUATE CUSTOMER-ID MOD 3 WHEN 0 SET ACTIVE TO TRUE MOVE 5000.00 TO CUSTOMER-BALANCE WHEN 1 SET INACTIVE TO TRUE MOVE 1000.00 TO CUSTOMER-BALANCE WHEN 2 SET SUSPENDED TO TRUE MOVE 0 TO CUSTOMER-BALANCE END-EVALUATE ADD CUSTOMER-BALANCE TO TOTAL-BALANCE DISPLAY 'Customer ' CUSTOMER-ID ' processed with status ' ACCOUNT-STATUS. DISPLAY-SUMMARY. DISPLAY 'Processing Summary:' DISPLAY 'Records processed: ' RECORD-COUNT DISPLAY 'Total balance: ' TOTAL-BALANCE.
Standards-compliant code follows the official COBOL syntax exactly, uses standard data types and picture clauses, employs proper 88-level conditions for readability, and avoids vendor-specific extensions. The code uses structured programming constructs like PERFORM VARYING and EVALUATE instead of GO TO statements, making it more maintainable and portable.
Many COBOL implementations include vendor-specific extensions that provide additional functionality but reduce portability. While these extensions can be useful, they should be avoided in code that needs to run on multiple platforms or be maintained by different teams.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859IDENTIFICATION DIVISION. PROGRAM-ID. PORTABLE-COBOL-EXAMPLE. *> This example avoids vendor-specific extensions for maximum portability DATA DIVISION. WORKING-STORAGE SECTION. *> Use standard data definitions 01 CURRENT-DATE. 05 YEAR PIC 9(4). 05 MONTH PIC 9(2). 05 DAY PIC 9(2). 01 CURRENT-TIME. 05 HOUR PIC 9(2). 05 MINUTE PIC 9(2). 05 SECOND PIC 9(2). *> Avoid vendor-specific data types *> Instead of: 01 BINARY-NUMBER PIC S9(9) COMP. *> Use standard: 01 BINARY-NUMBER PIC S9(9) COMP-5. 01 CALCULATION-RESULT PIC S9(9) COMP-5. PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM GET-CURRENT-DATE-TIME PERFORM PERFORM-CALCULATIONS PERFORM DISPLAY-RESULTS STOP RUN. GET-CURRENT-DATE-TIME. *> Use standard ACCEPT statement instead of vendor-specific functions ACCEPT YEAR FROM DATE YYYYMMDD ACCEPT MONTH FROM DATE YYYYMMDD(5:2) ACCEPT DAY FROM DATE YYYYMMDD(7:2) ACCEPT HOUR FROM TIME ACCEPT MINUTE FROM TIME(3:2) ACCEPT SECOND FROM TIME(5:2) DISPLAY 'Current date: ' YEAR '-' MONTH '-' DAY DISPLAY 'Current time: ' HOUR ':' MINUTE ':' SECOND. PERFORM-CALCULATIONS. *> Use standard arithmetic operations COMPUTE CALCULATION-RESULT = (YEAR * 10000) + (MONTH * 100) + DAY *> Avoid vendor-specific mathematical functions *> Use standard COBOL arithmetic instead IF CALCULATION-RESULT > 20240101 DISPLAY 'Date is in the future' ELSE DISPLAY 'Date is in the past or present' END-IF. DISPLAY-RESULTS. DISPLAY 'Calculation result: ' CALCULATION-RESULT. *> Avoid vendor-specific program termination *> Use standard STOP RUN instead of vendor-specific EXIT statements
This example demonstrates how to write portable COBOL code by using standard language features instead of vendor-specific extensions. It uses standard ACCEPT statements for date/time handling, standard arithmetic operations instead of vendor-specific functions, and standard program termination. This approach ensures the code will work on any COBOL implementation that follows the standard.
Migrating COBOL code from older standards to newer ones can provide access to modern features and improved capabilities. However, this process requires careful planning to ensure compatibility and maintain existing functionality while taking advantage of new features.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869IDENTIFICATION DIVISION. PROGRAM-ID. MIGRATION-EXAMPLE. *> Example of migrating from COBOL-74 to COBOL-2014 DATA DIVISION. WORKING-STORAGE SECTION. *> Old COBOL-74 style (commented out) *> 01 CUSTOMER-RECORD. *> 05 CUSTOMER-NUMBER PIC 9(6). *> 05 CUSTOMER-NAME PIC X(30). *> 05 CUSTOMER-BALANCE PIC 9(8)V99. *> New COBOL-2014 style with enhanced features 01 CUSTOMER-RECORD. 05 CUSTOMER-NUMBER PIC 9(8). *> Increased size for modern systems 05 CUSTOMER-NAME PIC X(50). *> Increased for international names 05 CUSTOMER-BALANCE PIC 9(12)V99. *> Increased for larger amounts 05 ACCOUNT-TYPE PIC X(10). 88 CHECKING VALUE 'CHECKING'. 88 SAVINGS VALUE 'SAVINGS'. 88 BUSINESS VALUE 'BUSINESS'. 05 CREATION-DATE PIC X(10). 05 LAST-UPDATE-DATE PIC X(10). PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM INITIALIZE-PROCESSING PERFORM PROCESS-CUSTOMERS PERFORM DISPLAY-RESULTS STOP RUN. INITIALIZE-PROCESSING. *> Use modern intrinsic functions MOVE FUNCTION CURRENT-DATE(1:10) TO CREATION-DATE MOVE FUNCTION CURRENT-DATE(1:10) TO LAST-UPDATE-DATE DISPLAY 'Processing started at: ' CREATION-DATE. PROCESS-CUSTOMERS. *> Old COBOL-74 style (commented out) *> PERFORM PROCESS-SINGLE-CUSTOMER UNTIL END-OF-FILE *> New COBOL-2014 style with structured loops PERFORM VARYING CUSTOMER-NUMBER FROM 10000001 BY 1 UNTIL CUSTOMER-NUMBER > 10000010 PERFORM PROCESS-SINGLE-CUSTOMER END-PERFORM. PROCESS-SINGLE-CUSTOMER. *> Use modern conditional logic EVALUATE CUSTOMER-NUMBER MOD 3 WHEN 0 SET CHECKING TO TRUE MOVE 2500.00 TO CUSTOMER-BALANCE WHEN 1 SET SAVINGS TO TRUE MOVE 5000.00 TO CUSTOMER-BALANCE WHEN 2 SET BUSINESS TO TRUE MOVE 10000.00 TO CUSTOMER-BALANCE END-EVALUATE *> Update timestamp using modern functions MOVE FUNCTION CURRENT-DATE(1:10) TO LAST-UPDATE-DATE DISPLAY 'Customer ' CUSTOMER-NUMBER ' processed'. DISPLAY-RESULTS. DISPLAY 'Processing completed at: ' FUNCTION CURRENT-DATE(1:10).
This migration example shows how to upgrade from older COBOL standards to modern ones. The old COBOL-74 style uses basic data structures and simple loops, while the new COBOL-2014 version includes enhanced data types, modern intrinsic functions, structured conditional logic with EVALUATE, and improved date/time handling. The migration maintains the same functionality while providing access to modern features.