COBOL keyword REDEFINES

lamwaiman1988 picture lamwaiman1988 · Mar 11, 2011 · Viewed 17.5k times · Source

May I ask, what is the usage of the keyword REDEFINES in COBOL? I can not understand the manual's definition.

What is the meaning of the following code?

 01 WS_CHARGE_TXT_8X                             PIC X(08) VALUE "10000000".  
 01 WS_CHARGE_NUM_8 REDEFINES WS_CHARGE_TXT_8X.  
     05 WS_CHARGE_8                               PIC 9(05)V9(03).  

Thank you!

Answer

Bruce Martin picture Bruce Martin · Mar 11, 2011

Basically Redefines reuses the spaces so in the above example WS_CHARGE_TXT_8X and WS_CHARGE_8 will point to the same block of memory. This allows you to look at a block of memory in different ways, in this case the variable can be viewed as a text PIC X and a signed numeric PIC S9. The -8X to -8 in the variable name is just stylistic to indicate the variable is being recast to another type or format to other programmers.

In the above example

  • the value of WS_CHARGE_TXT_8X is "10000000"
  • the value of WS_CHARGE_8 is of 10000.000.

If you moved 123.456 to WS_CHARGE_8 the value of WS_CHARGE_TXT_8X "00123456".

A more useful example is

  03 Birth-Date-YYYYMMDD    pic 9(8).
  03 filler redefines Birth-Date-YYYYMMDD.
     05 Birth-Date-YYYY     pic 9(4).
     05 Birth-Date-MM       pic 99.
     05 Birth-Date-DD       pic 99.

In this case you can access the whole date Birth-Date-YYYYMMDD or the year / month / day individually (Birth-Date-YYYY etc).