MainframeMaster

COBOL Data Formatting

Data formatting converts raw data into user-friendly display formats using PICTURE editing characters, formatting functions, and output presentation techniques. Learn to create professional reports and user interfaces.

PICTURE Editing Characters

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WORKING-STORAGE SECTION. 01 FORMATTING-EXAMPLES. 05 AMOUNT PIC 9(6)V99. 05 EDITED-AMOUNT PIC $,$$9.99. 05 PHONE-NUMBER PIC 9(10). 05 EDITED-PHONE PIC 999-999-9999. 05 DATE-FIELD PIC 9(8). 05 EDITED-DATE PIC 99/99/9999. 05 ID-NUMBER PIC 9(6). 05 EDITED-ID PIC ZZZZZ9. PROCEDURE DIVISION. MOVE 123456.78 TO AMOUNT MOVE AMOUNT TO EDITED-AMOUNT DISPLAY 'Formatted amount: ' EDITED-AMOUNT MOVE 1234567890 TO PHONE-NUMBER MOVE PHONE-NUMBER TO EDITED-PHONE DISPLAY 'Formatted phone: ' EDITED-PHONE.

Use PICTURE editing characters to format data display: $ for currency, , for thousands separators, - for phone numbers, / for dates, and Z for zero suppression. These characters control how data appears in output.

Numeric Formatting

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
WORKING-STORAGE SECTION. 01 NUMERIC-FORMATTING. 05 RAW-AMOUNT PIC 9(9)V99. 05 CURRENCY-FORMAT PIC $,$$$,$$9.99. 05 COMMA-FORMAT PIC Z,ZZZ,ZZ9.99. 05 ZERO-SUPPRESSED PIC ZZZZZZZ9.99. 05 SIGNED-FORMAT PIC +,$$$,$$9.99. 05 NEGATIVE-FORMAT PIC -,$$$,$$9.99. PROCEDURE DIVISION. MOVE 1234567.89 TO RAW-AMOUNT *> Currency formatting MOVE RAW-AMOUNT TO CURRENCY-FORMAT DISPLAY 'Currency: ' CURRENCY-FORMAT *> Comma formatting MOVE RAW-AMOUNT TO COMMA-FORMAT DISPLAY 'Commas: ' COMMA-FORMAT *> Zero suppression MOVE RAW-AMOUNT TO ZERO-SUPPRESSED DISPLAY 'Zero suppressed: ' ZERO-SUPPRESSED.

Format numeric data with currency symbols, thousands separators, zero suppression, and sign indicators. Use appropriate formatting based on data type and display requirements.

Date and Time Formatting

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
WORKING-STORAGE SECTION. 01 DATE-TIME-FORMATTING. 05 RAW-DATE PIC 9(8) VALUE 20231225. 05 FORMATTED-DATE PIC X(10). 05 RAW-TIME PIC 9(6) VALUE 143052. 05 FORMATTED-TIME PIC X(8). 05 TIMESTAMP PIC X(19). PROCEDURE DIVISION. *> Format date from YYYYMMDD to MM/DD/YYYY STRING RAW-DATE(5:2) '/' RAW-DATE(7:2) '/' RAW-DATE(1:4) INTO FORMATTED-DATE END-STRING *> Format time from HHMMSS to HH:MM:SS STRING RAW-TIME(1:2) ':' RAW-TIME(3:2) ':' RAW-TIME(5:2) INTO FORMATTED-TIME END-STRING *> Create timestamp STRING FORMATTED-DATE ' ' FORMATTED-TIME INTO TIMESTAMP END-STRING DISPLAY 'Formatted date: ' FORMATTED-DATE DISPLAY 'Formatted time: ' FORMATTED-TIME DISPLAY 'Timestamp: ' TIMESTAMP.

Convert date and time formats from internal storage (YYYYMMDD, HHMMSS) to user-friendly formats (MM/DD/YYYY, HH:MM:SS). Use STRING statements and reference modification for flexible formatting.

String Formatting

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
WORKING-STORAGE SECTION. 01 STRING-FORMATTING. 05 FIRST-NAME PIC X(15) VALUE 'JOHN'. 05 LAST-NAME PIC X(20) VALUE 'SMITH'. 05 FULL-NAME PIC X(40). 05 ADDRESS-LINE PIC X(60). 05 STREET PIC X(30) VALUE '123 MAIN ST'. 05 CITY PIC X(20) VALUE 'CHICAGO'. 05 STATE PIC X(2) VALUE 'IL'. 05 ZIP PIC X(10) VALUE '60601'. PROCEDURE DIVISION. *> Format full name STRING FIRST-NAME ' ' LAST-NAME INTO FULL-NAME END-STRING *> Format address line STRING STREET ', ' CITY ', ' STATE ' ' ZIP INTO ADDRESS-LINE END-STRING DISPLAY 'Full name: ' FULL-NAME DISPLAY 'Address: ' ADDRESS-LINE.

Use STRING statements to combine multiple fields into formatted strings. Create readable output by combining related fields with appropriate separators and spacing.

Report Formatting

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
WORKING-STORAGE SECTION. 01 REPORT-FORMATTING. 05 REPORT-LINE PIC X(132). 05 HEADER-LINE PIC X(132). 05 DETAIL-LINE PIC X(132). 05 TOTAL-LINE PIC X(132). PROCEDURE DIVISION. *> Format report header STRING 'CUSTOMER REPORT' SPACES(20) 'DATE: ' FUNCTION CURRENT-DATE(1:8) INTO HEADER-LINE END-STRING *> Format detail line STRING CUSTOMER-ID SPACES(5) CUSTOMER-NAME SPACES(10) '$' CUSTOMER-BALANCE INTO DETAIL-LINE END-STRING *> Format total line STRING 'TOTAL AMOUNT: ' SPACES(20) '$' TOTAL-AMOUNT INTO TOTAL-LINE END-STRING WRITE REPORT-LINE FROM HEADER-LINE WRITE REPORT-LINE FROM DETAIL-LINE WRITE REPORT-LINE FROM TOTAL-LINE.

Format report output with headers, detail lines, and totals. Use consistent spacing, alignment, and formatting throughout the report. Include report titles, dates, and summary information.

Conditional Formatting

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
WORKING-STORAGE SECTION. 01 CONDITIONAL-FORMATTING. 05 BALANCE PIC 9(9)V99. 05 FORMATTED-BALANCE PIC X(15). 05 BALANCE-STATUS PIC X(10). PROCEDURE DIVISION. *> Conditional formatting based on balance IF BALANCE > 10000 MOVE BALANCE TO FORMATTED-BALANCE STRING '$' BALANCE ' (HIGH)' INTO FORMATTED-BALANCE MOVE 'HIGH' TO BALANCE-STATUS ELSE IF BALANCE > 1000 MOVE BALANCE TO FORMATTED-BALANCE STRING '$' BALANCE ' (MEDIUM)' INTO FORMATTED-BALANCE MOVE 'MEDIUM' TO BALANCE-STATUS ELSE MOVE BALANCE TO FORMATTED-BALANCE STRING '$' BALANCE ' (LOW)' INTO FORMATTED-BALANCE MOVE 'LOW' TO BALANCE-STATUS END-IF. DISPLAY 'Balance: ' FORMATTED-BALANCE DISPLAY 'Status: ' BALANCE-STATUS.

Apply conditional formatting based on data values or business rules. Use different formatting styles, colors, or indicators to highlight important information or categorize data.

Output Formatting Best Practices

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WORKING-STORAGE SECTION. 01 FORMATTING-BEST-PRACTICES. 05 CONSISTENT-SPACING PIC X(20) VALUE 'CONSISTENT SPACING'. 05 ALIGNED-DATA PIC X(30) VALUE 'ALIGNED DATA'. 05 MEANINGFUL-LABELS PIC X(25) VALUE 'MEANINGFUL LABELS'. PROCEDURE DIVISION. *> Use consistent formatting patterns DISPLAY 'Customer ID: ' CUSTOMER-ID SPACES(5) 'Name: ' CUSTOMER-NAME SPACES(10) 'Balance: $' CUSTOMER-BALANCE *> Align numeric data DISPLAY 'Amount: ' AMOUNT SPACES(15) 'Total: ' TOTAL-AMOUNT *> Use meaningful labels DISPLAY 'Account Number: ' ACCOUNT-NUMBER DISPLAY 'Transaction Date: ' TRANSACTION-DATE DISPLAY 'Current Balance: $' CURRENT-BALANCE.

Follow formatting best practices: use consistent spacing and alignment, provide meaningful labels, group related information, and maintain professional appearance throughout output.

Performance Considerations

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WORKING-STORAGE SECTION. 01 PERFORMANCE-FORMATTING. 05 FORMATTED-OUTPUT PIC X(200). 05 FORMATTING-BUFFER PIC X(100). PROCEDURE DIVISION. *> Pre-format data for better performance PERFORM FORMAT-ALL-DATA *> Use formatted output buffer MOVE FORMATTED-OUTPUT TO OUTPUT-BUFFER DISPLAY OUTPUT-BUFFER *> Batch formatting operations PERFORM FORMAT-BATCH-DATA VARYING I FROM 1 BY 1 UNTIL I > RECORD-COUNT MOVE FORMATTED-DATA(I) TO OUTPUT-LINE WRITE OUTPUT-LINE END-PERFORM.

Optimize formatting performance by pre-formatting data, using output buffers, and batching formatting operations. Consider performance impact when choosing formatting techniques.