Today, while working on a COBOL program, I faced an issue where an improper value was being moved to a `COMP-3` data item defined as,
05 WS-COMP-DATA-ITEM PIC S9(7) COMP-3 VALUE 0.
The MOVE statement looked like below,
MOVE WS-GROUP-DATA-ITEM TO WS-COMP-DATA-ITEM.
After some debugging, I found that the source data item, a group level data item (WS-GROUP-DATA-ITEM) was type less, meaning it was neither numeric nor alphanumeric.
This is how the group data item was defined,
05 WS-GROUP-DATA-ITEM.
10 WS-VAR1 PIC 9(2) VALUE 0.
10 WS-VAR2 PIC 9(2) VALUE 0.
To fix the issue, I redefined the group level data item as follows:
05 WS-GROUP-DATA-ITEM.
10 WS-VAR1 PIC 9(2) VALUE 0.
10 WS-VAR2 PIC 9(2) VALUE 0.
05 WS-GROUP-DATA-ITEM-N REDEFINES WS-GROUP-DATA-ITEM PIC 9(4).
Then, I referenced the newly defined data item WS-GROUP-DATA-ITEM-N in the MOVE statement:
MOVE WS-GROUP-DATA-ITEM-N TO WS-COMP-DATA-ITEM.
Voila! The issue was resolved, and the data was correctly moved to the COMP-3 field.
To better understand the issue, take a look at the following code snippets.
- Code snippet that moves junk values to the COMP-3 field.
- Corrected version of the code with REDEFINES clause.
Lessons learned: Proper data representation is key in COBOL programming, and addressing type less data items through redefinition can be the solution to tricky issues.
Hope this helps!
No comments:
Post a Comment