Reputation: 33
I'm used the below code to find only the year of birth from age using cobol but couldn't able to convert the year into numeric variable. My code is
IDENTIFICATION DIVISION.
PROGRAM-ID. AGECONV.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CURR-YEAR PIC X(4) VALUES SPACES.
01 YEAR-OF-BIRTH X(4).
PROCEDURE DIVISION
MOVE FUNCTION CURRENT-DATE TO CURR-YEAR.
DISPLAY CURR-YEAR
SUBTRACT CURR-YEAR BY 22
GIVING YEAR-OF-BIRTH.
DISPLAY YEAR-OF-BIRTH.
I got the error that curr-year is not numeric.
Upvotes: 0
Views: 1720
Reputation: 1
I did it that way, an activity was passed to display this additional information in my group
IDENTIFICATION DIVISION.
PROGRAM-ID. AGECONV.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CURR-YEAR PIC 9(4) VALUE ZERO.
01 YEAR-OF-BIRTH PIC 9(4).
PROCEDURE DIVISION.
MOVE FUNCTION CURRENT-DATE (1:4) TO CURR-YEAR.
SUBTRACT 1999 FROM CURR-YEAR
GIVING YEAR-OF-BIRTH.
DISPLAY 'Me chamo Thiago Lyra e tenho ' YEAR-OF-BIRTH ' anos de idade'.
DISPLAY 'Meu email é: [email protected]'.
Upvotes: 0
Reputation: 4417
For SUBTRACT
the sending field, CURR-YEAR
, needs to be numeric. It was defined as alphanumeric. This means that CURR-YEAR
needs to be PIC 9(4)
. The same is true of YEAR-OF-BIRTH
which was missing the PIC
.
FUNCTION CURRENT-DATE
is an alphanumeric sending field. This rules for MOVE
do not allow it to be moved directly to a numeric field. The reference modifier, (1:4)
, was added to allow the move.
The format of the SUBTRACT
statement was incorrect and has been changed.
Revised code:
IDENTIFICATION DIVISION.
PROGRAM-ID. AGECONV.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CURR-YEAR PIC 9(4) VALUE ZERO.
01 YEAR-OF-BIRTH PIC 9(4).
PROCEDURE DIVISION.
MOVE FUNCTION CURRENT-DATE (1:4) TO CURR-YEAR.
DISPLAY CURR-YEAR
SUBTRACT 22 FROM CURR-YEAR
GIVING YEAR-OF-BIRTH.
DISPLAY YEAR-OF-BIRTH.
Output:
2020
1998
Upvotes: 1
Reputation: 51551
You need a more elaborate WORKING-STORAGE SECTION.
IDENTIFICATION DIVISION.
PROGRAM-ID. AGECONV.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-CURRENT-DATE-DATA.
05 WS-CURRENT-DATE.
10 WS-CURRENT-YEAR PIC 9(04).
10 WS-CURRENT-MONTH PIC 9(02).
10 WS-CURRENT-DAY PIC 9(02).
05 WS-CURRENT-TIME.
10 WS-CURRENT-HOURS PIC 9(02).
10 WS-CURRENT-MINUTE PIC 9(02).
10 WS-CURRENT-SECOND PIC 9(02).
10 WS-CURRENT-MILLISECONDS PIC 9(02).
01 YEAR-OF-BIRTH PIC 9(04).
PROCEDURE DIVISION.
MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE-DATA
DISPLAY WS-CURRENT-YEAR
SUBTRACT WS-CURRENT-YEAR BY 22 GIVING YEAR-OF-BIRTH
DISPLAY YEAR-OF-BIRTH.
Upvotes: 2