The DISPLAY statement outputs data to the screen, printer, or other output devices, providing formatted output capabilities in COBOL programs.
123DISPLAY { identifier-1 | literal-1 } [, { identifier-2 | literal-2 }]... [UPON mnemonic-name] [WITH NO ADVANCING]
123DISPLAY screen-name [AT { line-number column-number | identifier-3 }] [UPON CRT]
12345678910111213141516171819202122232425262728293031IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 EMPLOYEE-NAME PIC X(25) VALUE "John Smith". 01 EMPLOYEE-ID PIC 9(8) VALUE 12345678. 01 SALARY PIC 9(6)V99 VALUE 55000.50. 01 DEPARTMENT PIC X(15) VALUE "ENGINEERING". PROCEDURE DIVISION. MAIN-PARA. *> Simple literal display DISPLAY "Employee Information Report". DISPLAY "==========================". *> Display variables DISPLAY "Name: " EMPLOYEE-NAME. DISPLAY "ID: " EMPLOYEE-ID. DISPLAY "Salary: $" SALARY. DISPLAY "Department: " DEPARTMENT. *> Multiple items in one DISPLAY DISPLAY "Employee " EMPLOYEE-NAME " (ID: " EMPLOYEE-ID ") earns $" SALARY. *> Display special values DISPLAY "Current date: " FUNCTION CURRENT-DATE(1:8). DISPLAY "Program completed successfully". STOP RUN.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-FORMATTING. DATA DIVISION. WORKING-STORAGE SECTION. 01 REPORT-DATE PIC X(10). 01 PAGE-NUMBER PIC 9(3) VALUE 1. 01 LINE-COUNT PIC 9(3) VALUE 0. 01 SALES-AMOUNT PIC 9(6)V99 VALUE 12345.67. 01 FORMATTED-AMOUNT PIC $ZZ,ZZ9.99. 01 CUSTOMER-DATA. 05 CUST-ID PIC 9(8) VALUE 10001234. 05 CUST-NAME PIC X(30) VALUE "ABC Corporation Ltd.". 05 CUST-BALANCE PIC S9(8)V99 VALUE -5432.10. PROCEDURE DIVISION. MAIN-PARA. PERFORM SETUP-REPORT. PERFORM DISPLAY-HEADER. PERFORM DISPLAY-DETAIL-LINE. PERFORM DISPLAY-TOTALS. STOP RUN. SETUP-REPORT. ACCEPT REPORT-DATE FROM DATE YYYYMMDD. STRING REPORT-DATE(1:4) "/" REPORT-DATE(5:2) "/" REPORT-DATE(7:2) DELIMITED BY SIZE INTO REPORT-DATE. DISPLAY-HEADER. DISPLAY " ". DISPLAY " CUSTOMER BALANCE REPORT". DISPLAY " Date: " REPORT-DATE " Page: " PAGE-NUMBER. DISPLAY "=====================================". DISPLAY "Customer ID Customer Name" " Balance". DISPLAY "---------- --------------" " --------". ADD 6 TO LINE-COUNT. DISPLAY-DETAIL-LINE. *> Format the amount for display MOVE SALES-AMOUNT TO FORMATTED-AMOUNT. *> Display customer information with formatting DISPLAY CUST-ID " " CUST-NAME(1:25) " " FORMATTED-AMOUNT. *> Handle negative balance display IF CUST-BALANCE < 0 DISPLAY CUST-ID " " CUST-NAME(1:25) " (" CUST-BALANCE ")" ELSE DISPLAY CUST-ID " " CUST-NAME(1:25) " " CUST-BALANCE END-IF. ADD 2 TO LINE-COUNT. DISPLAY-TOTALS. DISPLAY "=====================================". DISPLAY "Report completed. Lines printed: " LINE-COUNT. ADD 2 TO LINE-COUNT.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-POSITIONING. DATA DIVISION. WORKING-STORAGE SECTION. 01 USER-NAME PIC X(20). 01 MENU-CHOICE PIC 9. PROCEDURE DIVISION. MAIN-PARA. PERFORM CLEAR-SCREEN. PERFORM DISPLAY-MENU. PERFORM GET-USER-INPUT. STOP RUN. CLEAR-SCREEN. *> Clear screen using multiple blank lines PERFORM 25 TIMES DISPLAY " " END-PERFORM. DISPLAY-MENU. DISPLAY "================================". DISPLAY " MAIN MENU SYSTEM ". DISPLAY "================================". DISPLAY " ". DISPLAY "1. Customer Information". DISPLAY "2. Sales Reports". DISPLAY "3. Inventory Management". DISPLAY "4. System Administration". DISPLAY "5. Exit Program". DISPLAY " ". DISPLAY "Please enter your choice (1-5): " WITH NO ADVANCING. GET-USER-INPUT. ACCEPT MENU-CHOICE. DISPLAY " ". EVALUATE MENU-CHOICE WHEN 1 DISPLAY "Customer Information selected" WHEN 2 DISPLAY "Sales Reports selected" WHEN 3 DISPLAY "Inventory Management selected" WHEN 4 DISPLAY "System Administration selected" WHEN 5 DISPLAY "Exiting program..." WHEN OTHER DISPLAY "Invalid choice. Please try again." END-EVALUATE.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-SCREEN. DATA DIVISION. WORKING-STORAGE SECTION. 01 CURRENT-TIME PIC X(8). 01 CURRENT-DATE PIC X(8). SCREEN SECTION. 01 MAIN-SCREEN. 05 BLANK SCREEN. 05 LINE 2 COLUMN 20 VALUE "EMPLOYEE MANAGEMENT SYSTEM". 05 LINE 3 COLUMN 20 VALUE "===========================". 05 LINE 5 COLUMN 5 VALUE "Date: ". 05 LINE 5 COLUMN 11 PIC X(8) FROM CURRENT-DATE. 05 LINE 5 COLUMN 25 VALUE "Time: ". 05 LINE 5 COLUMN 31 PIC X(8) FROM CURRENT-TIME. 05 LINE 8 COLUMN 10 VALUE "Employee ID: ". 05 LINE 10 COLUMN 10 VALUE "First Name: ". 05 LINE 12 COLUMN 10 VALUE "Last Name: ". 05 LINE 14 COLUMN 10 VALUE "Department: ". 05 LINE 18 COLUMN 10 VALUE "Press Enter to continue...". 01 DATA-ENTRY-SCREEN. 05 LINE 8 COLUMN 25 PIC 9(8) TO EMP-ID. 05 LINE 10 COLUMN 25 PIC X(15) TO FIRST-NAME. 05 LINE 12 COLUMN 25 PIC X(20) TO LAST-NAME. 05 LINE 14 COLUMN 25 PIC X(15) TO DEPARTMENT. 01 EMP-ID PIC 9(8). 01 FIRST-NAME PIC X(15). 01 LAST-NAME PIC X(20). 01 DEPARTMENT PIC X(15). PROCEDURE DIVISION. MAIN-PARA. PERFORM GET-SYSTEM-INFO. DISPLAY MAIN-SCREEN. ACCEPT DATA-ENTRY-SCREEN. PERFORM DISPLAY-CONFIRMATION. STOP RUN. GET-SYSTEM-INFO. ACCEPT CURRENT-DATE FROM DATE YYYYMMDD. ACCEPT CURRENT-TIME FROM TIME. *> Format date as MM/DD/YYYY STRING CURRENT-DATE(5:2) "/" CURRENT-DATE(7:2) "/" CURRENT-DATE(1:4) DELIMITED BY SIZE INTO CURRENT-DATE. *> Format time as HH:MM:SS STRING CURRENT-TIME(1:2) ":" CURRENT-TIME(3:2) ":" CURRENT-TIME(5:2) DELIMITED BY SIZE INTO CURRENT-TIME. DISPLAY-CONFIRMATION. DISPLAY " ". DISPLAY "Employee data entered:". DISPLAY "ID: " EMP-ID. DISPLAY "Name: " FUNCTION TRIM(FIRST-NAME) " " FUNCTION TRIM(LAST-NAME). DISPLAY "Department: " FUNCTION TRIM(DEPARTMENT).
1234567891011121314151617181920212223242526272829303132333435IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-DEVICES. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CONSOLE IS TERMINAL PRINTER IS LINE-PRINTER SYSERR IS ERROR-LOG. DATA DIVISION. WORKING-STORAGE SECTION. 01 ERROR-MESSAGE PIC X(80). 01 REPORT-LINE PIC X(132). PROCEDURE DIVISION. MAIN-PARA. *> Display to console/terminal DISPLAY "Program starting..." UPON TERMINAL. *> Display to printer DISPLAY "SALES REPORT FOR JANUARY 2024" UPON LINE-PRINTER. DISPLAY "=============================" UPON LINE-PRINTER. *> Display error to error log MOVE "Error: Invalid customer ID format" TO ERROR-MESSAGE. DISPLAY ERROR-MESSAGE UPON ERROR-LOG. *> Standard output (default) DISPLAY "Processing customer records...". *> System output DISPLAY "Process completed successfully" UPON SYSERR. STOP RUN.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-REPORT. DATA DIVISION. WORKING-STORAGE SECTION. 01 SALES-TABLE. 05 SALES-RECORD OCCURS 5 TIMES. 10 SALESPERSON PIC X(20). 10 SALES-AMOUNT PIC 9(6)V99. 01 TOTAL-SALES PIC 9(8)V99 VALUE ZERO. 01 AVERAGE-SALES PIC 9(6)V99. 01 COUNTER PIC 9(2). 01 REPORT-DATE PIC X(10). PROCEDURE DIVISION. MAIN-PARA. PERFORM INITIALIZE-DATA. PERFORM DISPLAY-REPORT-HEADER. PERFORM DISPLAY-DETAIL-LINES. PERFORM DISPLAY-SUMMARY. STOP RUN. INITIALIZE-DATA. MOVE "Alice Johnson" TO SALESPERSON(1). MOVE 15750.50 TO SALES-AMOUNT(1). MOVE "Bob Smith" TO SALESPERSON(2). MOVE 22150.75 TO SALES-AMOUNT(2). MOVE "Carol Williams" TO SALESPERSON(3). MOVE 18900.25 TO SALES-AMOUNT(3). MOVE "David Brown" TO SALESPERSON(4). MOVE 31200.00 TO SALES-AMOUNT(4). MOVE "Eva Davis" TO SALESPERSON(5). MOVE 27550.80 TO SALES-AMOUNT(5). ACCEPT REPORT-DATE FROM DATE YYYYMMDD. DISPLAY-REPORT-HEADER. DISPLAY " ". DISPLAY " MONTHLY SALES REPORT". DISPLAY " ==================". DISPLAY "Report Date: " REPORT-DATE(1:4) "/" REPORT-DATE(5:2) "/" REPORT-DATE(7:2). DISPLAY " ". DISPLAY "Salesperson Sales Amount". DISPLAY "-------------------- -----------". DISPLAY-DETAIL-LINES. PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 5 DISPLAY SALESPERSON(COUNTER) " $" SALES-AMOUNT(COUNTER) ADD SALES-AMOUNT(COUNTER) TO TOTAL-SALES END-PERFORM. DISPLAY-SUMMARY. DIVIDE TOTAL-SALES BY 5 GIVING AVERAGE-SALES ROUNDED. DISPLAY "-------------------- -----------". DISPLAY "Total Sales: $" TOTAL-SALES. DISPLAY "Average Sales: $" AVERAGE-SALES. DISPLAY "Number of Sales: " COUNTER. DISPLAY " ". DISPLAY "Report generated successfully".
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-PROGRESS. DATA DIVISION. WORKING-STORAGE SECTION. 01 RECORD-COUNT PIC 9(6) VALUE 0. 01 TOTAL-RECORDS PIC 9(6) VALUE 10000. 01 PERCENT-COMPLETE PIC 9(3). 01 PROGRESS-BAR PIC X(50). 01 BAR-POSITION PIC 9(2). PROCEDURE DIVISION. MAIN-PARA. PERFORM PROCESS-RECORDS. DISPLAY "Processing completed successfully!". STOP RUN. PROCESS-RECORDS. DISPLAY "Starting data processing...". DISPLAY " ". PERFORM VARYING RECORD-COUNT FROM 1 BY 1 UNTIL RECORD-COUNT > TOTAL-RECORDS *> Simulate record processing CALL "SLEEP" USING 1 *> Sleep for demonstration *> Update progress every 1000 records IF FUNCTION MOD(RECORD-COUNT, 1000) = 0 PERFORM UPDATE-PROGRESS END-IF END-PERFORM. UPDATE-PROGRESS. COMPUTE PERCENT-COMPLETE = (RECORD-COUNT * 100) / TOTAL-RECORDS. COMPUTE BAR-POSITION = PERCENT-COMPLETE / 2. MOVE ALL "." TO PROGRESS-BAR. MOVE ALL "=" TO PROGRESS-BAR(1:BAR-POSITION). DISPLAY "Progress: [" PROGRESS-BAR "] " PERCENT-COMPLETE "% (" RECORD-COUNT " of " TOTAL-RECORDS " records)" WITH NO ADVANCING. *> Move cursor to beginning of line for next update DISPLAY X"0D" WITH NO ADVANCING. *> Carriage return
Technique | Purpose | Example |
---|---|---|
WITH NO ADVANCING | Continue on same line | DISPLAY "Name: " WITH NO ADVANCING |
UPON device-name | Direct output to specific device | DISPLAY "Error" UPON SYSERR |
Multiple items | Concatenate output | DISPLAY "ID: " CUSTOMER-ID |
SCREEN section | Formatted screen layouts | DISPLAY CUSTOMER-SCREEN |
Line positioning | Control output position | AT LINE 10 COLUMN 20 |
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647IDENTIFICATION DIVISION. PROGRAM-ID. DISPLAY-DEBUG. DATA DIVISION. WORKING-STORAGE SECTION. 01 DEBUG-MODE PIC X VALUE 'Y'. 01 FUNCTION-NAME PIC X(20). 01 VARIABLE-VALUE PIC X(50). PROCEDURE DIVISION. MAIN-PARA. MOVE "MAIN-PARA" TO FUNCTION-NAME. PERFORM DEBUG-ENTRY. PERFORM CALCULATE-TOTALS. PERFORM DEBUG-EXIT. STOP RUN. CALCULATE-TOTALS. MOVE "CALCULATE-TOTALS" TO FUNCTION-NAME. PERFORM DEBUG-ENTRY. *> Simulate calculation with debug output MOVE "Processing record 1" TO VARIABLE-VALUE. PERFORM DEBUG-MESSAGE. MOVE "Total calculated: 1500.00" TO VARIABLE-VALUE. PERFORM DEBUG-MESSAGE. PERFORM DEBUG-EXIT. DEBUG-ENTRY. IF DEBUG-MODE = 'Y' DISPLAY ">>> ENTERING: " FUNCTION-NAME " at " FUNCTION CURRENT-DATE(9:8) END-IF. DEBUG-EXIT. IF DEBUG-MODE = 'Y' DISPLAY "<<< EXITING: " FUNCTION-NAME END-IF. DEBUG-MESSAGE. IF DEBUG-MODE = 'Y' DISPLAY " DEBUG: " VARIABLE-VALUE END-IF.