The REDEFINES clause allows multiple data layouts to share the same storage area, creating union-like structures in COBOL. This enables different interpretations of the same memory location and is commonly used for multiple record layouts and data type conversions.
Multiple REDEFINES fields occupy the same storage area as the original field.
The REDEFINES clause follows specific syntax patterns and can be used at various levels in data definitions.
1234567891011121314151617181920212223242526* Basic REDEFINES clause syntax level-number data-name REDEFINES original-field-name * Examples 05 ALTERNATE-LAYOUT REDEFINES ORIGINAL-FIELD. 05 NUMERIC-VALUE REDEFINES CHARACTER-FIELD. 05 DATE-FIELD REDEFINES TIMESTAMP-FIELD. * Complete example 01 CUSTOMER-RECORD. 05 RECORD-TYPE PIC X. 05 CUSTOMER-DATA PIC X(99). 01 CUSTOMER-HEADER REDEFINES CUSTOMER-RECORD. 05 HR-RECORD-TYPE PIC X. 05 HR-FILE-DATE PIC 9(8). 05 HR-RECORD-COUNT PIC 9(5). 05 HR-FILLER PIC X(86). 01 CUSTOMER-DETAIL REDEFINES CUSTOMER-RECORD. 05 DR-RECORD-TYPE PIC X. 05 DR-CUSTOMER-ID PIC 9(5). 05 DR-CUSTOMER-NAME PIC X(30). 05 DR-CUSTOMER-ADDR PIC X(50). 05 DR-STATUS PIC X. 05 DR-FILLER PIC X(13).
REDEFINES can be used at any level except 01 (record level).
Level | Can Use REDEFINES | Common Usage |
---|---|---|
01 | No | Record level - cannot redefine |
02-49 | Yes | Field and group levels |
66 | No | RENAMES level - different purpose |
77 | No | Independent item level |
88 | No | Condition name level |
12345678910111213141516* Multiple REDEFINES of the same field 01 SHARED-STORAGE. 05 ORIGINAL-FIELD PIC X(10). 05 ALTERNATE-1 REDEFINES ORIGINAL-FIELD. 10 ALT1-PART1 PIC X(5). 10 ALT1-PART2 PIC X(5). 05 ALTERNATE-2 REDEFINES ORIGINAL-FIELD. 10 ALT2-NUMERIC PIC 9(10). 05 ALTERNATE-3 REDEFINES ORIGINAL-FIELD. 10 ALT3-DATE PIC 9(8). 10 ALT3-TIME PIC 9(2). * All three REDEFINES share the same 10-byte storage area
Multiple REDEFINES can share the same original field storage.
REDEFINES is commonly used in specific scenarios where different data layouts need to share storage or where data interpretation varies.
12345678910111213141516171819202122232425262728293031* File with different record types 01 INVENTORY-RECORD. 05 RECORD-TYPE PIC X. 88 HEADER-RECORD VALUE 'H'. 88 DETAIL-RECORD VALUE 'D'. 88 TRAILER-RECORD VALUE 'T'. 05 RECORD-DATA PIC X(99). 01 HEADER-RECORD REDEFINES INVENTORY-RECORD. 05 HR-TYPE PIC X. 05 HR-FILE-DATE PIC 9(8). 05 HR-COMPANY-NAME PIC X(50). 05 HR-VERSION PIC 9(2). 05 HR-FILLER PIC X(39). 01 DETAIL-RECORD REDEFINES INVENTORY-RECORD. 05 DR-TYPE PIC X. 05 DR-ITEM-NUMBER PIC 9(10). 05 DR-ITEM-NAME PIC X(30). 05 DR-QUANTITY PIC 9(5). 05 DR-UNIT-PRICE PIC 9(5)V99. 05 DR-LOCATION PIC X(10). 05 DR-STATUS PIC X. 05 DR-FILLER PIC X(36). 01 TRAILER-RECORD REDEFINES INVENTORY-RECORD. 05 TR-TYPE PIC X. 05 TR-RECORD-COUNT PIC 9(10). 05 TR-TOTAL-ITEMS PIC 9(10). 05 TR-TOTAL-VALUE PIC 9(10)V99. 05 TR-FILLER PIC X(66).
Different record layouts share the same storage area based on record type.
123456789101112131415161718192021222324252627282930* Converting between data types 01 FLEXIBLE-DATA. 05 CHARACTER-VALUE PIC X(8). 05 NUMERIC-VALUE REDEFINES CHARACTER-VALUE. 10 NUM-PART PIC 9(8). 05 DATE-VALUE REDEFINES CHARACTER-VALUE. 10 YEAR PIC 9(4). 10 MONTH PIC 9(2). 10 DAY PIC 9(2). 05 TIME-VALUE REDEFINES CHARACTER-VALUE. 10 HOUR PIC 9(2). 10 MINUTE PIC 9(2). 10 SECOND PIC 9(2). 10 HUNDREDTH PIC 9(2). * Usage example PROCEDURE DIVISION. * Store as character MOVE "20231225" TO CHARACTER-VALUE * Access as date components DISPLAY "Year: " YEAR DISPLAY "Month: " MONTH DISPLAY "Day: " DAY * Access as numeric DISPLAY "Numeric: " NUMERIC-VALUE
Same data can be interpreted as different types using REDEFINES.
12345678910111213141516171819202122232425262728* Bit-level access using REDEFINES 01 FLAG-WORD. 05 FLAG-BYTE PIC X. 05 FLAG-BITS REDEFINES FLAG-BYTE. 10 BIT-0 PIC 1. 10 BIT-1 PIC 1. 10 BIT-2 PIC 1. 10 BIT-3 PIC 1. 10 BIT-4 PIC 1. 10 BIT-5 PIC 1. 10 BIT-6 PIC 1. 10 BIT-7 PIC 1. * Usage example PROCEDURE DIVISION. * Set individual bits MOVE 1 TO BIT-0 MOVE 1 TO BIT-3 MOVE 1 TO BIT-7 * Check bit values IF BIT-0 = 1 DISPLAY "Bit 0 is set" END-IF * Access as byte DISPLAY "Flag byte value: " FLAG-BYTE
REDEFINES enables bit-level access to byte data.
Following these best practices ensures effective and safe use of the REDEFINES clause in COBOL applications.
Pitfall | Problem | Solution |
---|---|---|
Size mismatch | Data corruption, program errors | Ensure total size doesn\'t exceed original |
Incorrect field access | Wrong data interpretation | Use condition names to determine layout |
Data corruption | Changes affect all REDEFINES fields | Be careful when modifying shared data |
Complex structures | Hard to maintain and debug | Keep REDEFINES structures simple |
No documentation | Confusion about data relationships | Document all REDEFINES relationships |
Use Case | REDEFINES Suitability | Reasoning |
---|---|---|
Multiple record types | Excellent | Natural fit for different layouts |
Data type conversion | Good | Efficient for type reinterpretation |
Bit manipulation | Good | Provides bit-level access |
Simple field aliases | Poor | Use RENAMES instead |
Independent data | Poor | Use separate fields |
Usage | Syntax | Example |
---|---|---|
Basic redefinition | level data-name REDEFINES original-field | 05 ALT-LAYOUT REDEFINES ORIG-FIELD |
Multiple redefinitions | Multiple REDEFINES of same field | 05 ALT1 REDEFINES FIELD 05 ALT2 REDEFINES FIELD |
Record layouts | 01 record-name REDEFINES original-record | 01 HEADER-REC REDEFINES DATA-REC |
Data type conversion | 05 numeric-field REDEFINES char-field | 05 NUM-VAL REDEFINES CHAR-VAL |
Bit manipulation | 05 bit-fields REDEFINES byte-field | 05 BITS REDEFINES FLAG-BYTE |
1. What is the primary purpose of the REDEFINES clause in COBOL?
2. At what level can the REDEFINES clause be used?
3. What happens when you modify data in a REDEFINES field?
4. Which of the following is a common use case for REDEFINES?
5. What is the relationship between the original field and REDEFINES fields?