MainframeMaster

COBOL Tutorial

COBOL DISPLAY Statement

The DISPLAY statement outputs data to the screen, printer, or other output devices, providing formatted output capabilities in COBOL programs.

Syntax

Basic DISPLAY

cobol
1
2
3
DISPLAY { identifier-1 | literal-1 } [, { identifier-2 | literal-2 }]... [UPON mnemonic-name] [WITH NO ADVANCING]

Screen DISPLAY

cobol
1
2
3
DISPLAY screen-name [AT { line-number column-number | identifier-3 }] [UPON CRT]

Basic Output Operations

Simple Output

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
IDENTIFICATION 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.

Formatted Output

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
64
65
66
IDENTIFICATION 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.

Line Control and Positioning

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
IDENTIFICATION 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.

Advanced Screen Display

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
64
65
IDENTIFICATION 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).

Output Control and Device Options

Device-Specific Output

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
IDENTIFICATION 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.

Report Generation

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. 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".

Progress Indicators and Status

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
IDENTIFICATION 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

Display Formatting Techniques

TechniquePurposeExample
WITH NO ADVANCINGContinue on same lineDISPLAY "Name: " WITH NO ADVANCING
UPON device-nameDirect output to specific deviceDISPLAY "Error" UPON SYSERR
Multiple itemsConcatenate outputDISPLAY "ID: " CUSTOMER-ID
SCREEN sectionFormatted screen layoutsDISPLAY CUSTOMER-SCREEN
Line positioningControl output positionAT LINE 10 COLUMN 20

Error Handling and Debugging

Debug Output

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
IDENTIFICATION 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.

Best Practices

Do

  • Use meaningful output messages
  • Format numbers with appropriate picture clauses
  • Provide clear user prompts
  • Use consistent spacing and alignment
  • Include headers and footers in reports

Don't

  • Display uninitialized variables
  • Create overly long lines
  • Mix output destinations carelessly
  • Forget to handle special characters
  • Ignore output device capabilities

Related COBOL Statements

  • ACCEPT - Input data from devices
  • WRITE - Output data to files
  • STRING - Format data for display
  • INSPECT - Format and transform output data
  • MOVE - Prepare data for display