COBOL keyword REDEFINES

It is analogous to union in 'C'. It saves working storage space, and MOVE statements, and is also useful for transposing arrays of PIC(X), or accessing repeated fields as an array. In the OP's case a numeric "type" is being created for the char contents of the prototype field.


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).

Tags:

Cobol