Search code examples
datecobol

COBOL- Find year of Birth from age


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.


Solution

  • 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