COBOL关键字REDEFINES

时间:2011-03-11 06:54:02

标签: cobol

请问,COBOL中关键字REDEFINES的用法是什么? 我无法理解手册的定义。

以下代码的含义是什么?

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

谢谢!

3 个答案:

答案 0 :(得分:19)

基本上Redefines重用空格,因此在上面的示例中WS_CHARGE_TXT_8XWS_CHARGE_8将指向相同内存块。这允许您以不同的方式查看内存块,在这种情况下,变量可以被视为文本 PIC X 和带符号的数字 PIC S9 。变量名中的 -8X -8 只是风格,表明该变量正在重新转换为其他类型或格式给其他程序员。

在上面的例子中

  • WS_CHARGE_TXT_8X的值是 “10000000”
  • WS_CHARGE_8的值是 10000.000。

如果您将 123.456 移至WS_CHARGE_8 WS_CHARGE_TXT_8X “00123456”的值。

更有用的例子是

  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.

在这种情况下,您可以分别访问整个日期 出生日期-YYYYMMDD 年/月/日出生日期 - YYYY 等。)

答案 1 :(得分:3)

它类似于'C'中的联合。 它节省了工作存储空间和MOVE语句,对于转换PIC(X)数组或作为数组访问重复字段也很有用。 在OP的情况下,正在为原型字段的char内容创建数字“类型”。

答案 2 :(得分:1)

REDEFINES允许对已经定义的存储使用不同的数据描述。

这可能是为了允许在那里保存完全不同的数据。

05  RL-AGENT-DATA.
...
05  RL-CUSTOMER-DATA REDEFINES RL-AGENT-DATA.
...

或者给出一个允许使用部分数据的描述,如Bruce的例子。

或者使用相同的数据,但用于不同的目的:

05  INPUT-AMOUNT PIC X(10).
05  INPUT-AMOUNT-NUMERIC REDEFINES PIC 9(8)V99.

无论INPUT-AMOUNT是什么,都可以毫无问题地报告,但只有当它是有效数字时(通过测试它为NUMERIC),INPUT-AMOUNT-NUMERIC用于某种目的。

请注意,FD下第一个01之后的每个01都是“隐含的REDEFINES”。

另请注意,LINKAGE SECTION中的项目具有“重新定义”“某些东西”的效果,即使数据的地址来自CALLing程序,该定义通常与原始定义相同,并且通常应该至少匹配原件的PICtures。