MainframeMaster

COBOL Data Conversion

Data conversion transforms data between different types and formats. Learn to convert between numeric and character formats, change data representations, and handle format transformations in COBOL programs.

Numeric to Character Conversion

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WORKING-STORAGE SECTION. 01 NUMERIC-FIELD PIC 9(6) VALUE 123456. 01 CHARACTER-FIELD PIC X(6). 01 FORMATTED-FIELD PIC X(10). PROCEDURE DIVISION. *> Basic numeric to character conversion MOVE NUMERIC-FIELD TO CHARACTER-FIELD DISPLAY 'Numeric as character: ' CHARACTER-FIELD *> Formatted conversion with editing MOVE NUMERIC-FIELD TO FORMATTED-FIELD DISPLAY 'Formatted: ' FORMATTED-FIELD *> Using intrinsic functions MOVE FUNCTION NUMVAL(NUMERIC-FIELD) TO CHARACTER-FIELD.

Convert numeric fields to character format using MOVE statements. COBOL automatically handles the conversion based on the target field's PICTURE clause. Use editing characters for formatted output.

Character to Numeric Conversion

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WORKING-STORAGE SECTION. 01 CHARACTER-FIELD PIC X(6) VALUE '123456'. 01 NUMERIC-FIELD PIC 9(6). 01 VALIDATION-FLAG PIC X VALUE 'N'. PROCEDURE DIVISION. *> Validate before conversion IF CHARACTER-FIELD IS NUMERIC MOVE CHARACTER-FIELD TO NUMERIC-FIELD MOVE 'Y' TO VALIDATION-FLAG DISPLAY 'Converted to numeric: ' NUMERIC-FIELD ELSE DISPLAY 'Error: Non-numeric data in character field' END-IF. *> Using intrinsic functions IF FUNCTION NUMVAL(CHARACTER-FIELD) > 0 MOVE FUNCTION NUMVAL(CHARACTER-FIELD) TO NUMERIC-FIELD END-IF.

Convert character fields to numeric format after validating the data. Use class conditions to check if character data is numeric before conversion. Use intrinsic functions for more complex conversions.

Numeric Format Conversion

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 DISPLAY-NUMERIC PIC 9(6) VALUE 123456. 01 COMP-NUMERIC PIC 9(6) COMP. 01 COMP3-NUMERIC PIC 9(6) COMP-3. 01 COMP5-NUMERIC PIC 9(6) COMP-5. PROCEDURE DIVISION. *> Convert between numeric formats MOVE DISPLAY-NUMERIC TO COMP-NUMERIC DISPLAY 'DISPLAY to COMP: ' COMP-NUMERIC MOVE COMP-NUMERIC TO COMP3-NUMERIC DISPLAY 'COMP to COMP-3: ' COMP3-NUMERIC MOVE COMP3-NUMERIC TO COMP5-NUMERIC DISPLAY 'COMP-3 to COMP-5: ' COMP5-NUMERIC *> Convert back to display format MOVE COMP5-NUMERIC TO DISPLAY-NUMERIC DISPLAY 'COMP-5 to DISPLAY: ' DISPLAY-NUMERIC.

Convert between different numeric formats: DISPLAY (character), COMP (binary), COMP-3 (packed decimal), and COMP-5 (native binary). Each format has different storage requirements and performance characteristics.

Date Format Conversion

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
WORKING-STORAGE SECTION. 01 YYYYMMDD-DATE PIC 9(8) VALUE 20231225. 01 MMDDYYYY-DATE PIC X(10). 01 DDMMYYYY-DATE PIC X(10). 01 DISPLAY-DATE PIC X(12). PROCEDURE DIVISION. *> Convert YYYYMMDD to MM/DD/YYYY STRING YYYYMMDD-DATE(5:2) '/' YYYYMMDD-DATE(7:2) '/' YYYYMMDD-DATE(1:4) INTO MMDDYYYY-DATE END-STRING *> Convert YYYYMMDD to DD/MM/YYYY STRING YYYYMMDD-DATE(7:2) '/' YYYYMMDD-DATE(5:2) '/' YYYYMMDD-DATE(1:4) INTO DDMMYYYY-DATE END-STRING *> Convert to readable format STRING YYYYMMDD-DATE(5:2) '/' YYYYMMDD-DATE(7:2) '/' YYYYMMDD-DATE(1:4) INTO DISPLAY-DATE END-STRING.

Convert date formats using reference modification and STRING statements. Transform between YYYYMMDD, MM/DD/YYYY, DD/MM/YYYY, and other date formats for different display and processing requirements.

Case Conversion

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
WORKING-STORAGE SECTION. 01 MIXED-CASE PIC X(20) VALUE 'Hello World'. 01 UPPER-CASE PIC X(20). 01 LOWER-CASE PIC X(20). PROCEDURE DIVISION. *> Convert to uppercase MOVE FUNCTION UPPER-CASE(MIXED-CASE) TO UPPER-CASE DISPLAY 'Uppercase: ' UPPER-CASE *> Convert to lowercase MOVE FUNCTION LOWER-CASE(MIXED-CASE) TO LOWER-CASE DISPLAY 'Lowercase: ' LOWER-CASE *> Convert specific portions MOVE FUNCTION UPPER-CASE(MIXED-CASE(1:5)) TO UPPER-CASE(1:5) DISPLAY 'Partial uppercase: ' UPPER-CASE.

Convert character case using intrinsic functions UPPER-CASE and LOWER-CASE. These functions handle mixed-case text and can be applied to entire fields or specific portions using reference modification.

Currency Format Conversion

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WORKING-STORAGE SECTION. 01 AMOUNT PIC 9(9)V99 VALUE 123456789. 01 CURRENCY-DISPLAY PIC X(15). 01 CURRENCY-SYMBOL PIC X VALUE '$'. PROCEDURE DIVISION. *> Convert to currency format STRING CURRENCY-SYMBOL AMOUNT(1:3) ',' AMOUNT(4:3) ',' AMOUNT(7:3) '.' AMOUNT(10:2) INTO CURRENCY-DISPLAY END-STRING DISPLAY 'Currency format: ' CURRENCY-DISPLAY *> Alternative using editing 01 EDITED-AMOUNT PIC $,$$$,$$9.99. MOVE AMOUNT TO EDITED-AMOUNT DISPLAY 'Edited amount: ' EDITED-AMOUNT.

Convert numeric amounts to currency format with symbols, commas, and decimal places. Use STRING statements for custom formatting or PICTURE editing characters for standard currency display.

Data Type Validation

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
VALIDATE-AND-CONVERT. *> Validate numeric data IF INPUT-FIELD IS NUMERIC MOVE INPUT-FIELD TO NUMERIC-FIELD DISPLAY 'Valid numeric conversion' ELSE DISPLAY 'Error: Non-numeric data' MOVE 0 TO NUMERIC-FIELD END-IF. *> Validate alphabetic data IF NAME-FIELD IS ALPHABETIC MOVE FUNCTION UPPER-CASE(NAME-FIELD) TO UPPER-NAME DISPLAY 'Valid alphabetic conversion' ELSE DISPLAY 'Error: Non-alphabetic data in name field' MOVE SPACES TO UPPER-NAME END-IF. *> Validate date format IF DATE-FIELD IS NUMERIC AND FUNCTION LENGTH(DATE-FIELD) = 8 MOVE DATE-FIELD TO VALID-DATE DISPLAY 'Valid date format' ELSE DISPLAY 'Error: Invalid date format' MOVE 0 TO VALID-DATE END-IF.

Validate data before conversion to ensure data integrity. Check data types, lengths, and formats before performing conversions. Provide meaningful error messages and default values for invalid data.

Performance Considerations

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*> Efficient conversion patterns *> Use COMP fields for calculations 01 CALCULATION-FIELD PIC 9(9)V99 COMP. 01 DISPLAY-FIELD PIC 9(9)V99. *> Convert only when needed IF DISPLAY-REQUIRED = 'Y' MOVE CALCULATION-FIELD TO DISPLAY-FIELD DISPLAY 'Amount: ' DISPLAY-FIELD END-IF. *> Batch conversions for efficiency PERFORM CONVERT-BATCH-DATA VARYING I FROM 1 BY 1 UNTIL I > RECORD-COUNT MOVE NUMERIC-DATA(I) TO CHARACTER-DATA(I) END-PERFORM.

Optimize conversion performance by using appropriate data types for calculations, converting only when necessary, and batching conversions for efficiency. Consider memory usage and processing time for large datasets.