请问,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).
谢谢!
答案 0 :(得分:19)
基本上Redefines重用空格,因此在上面的示例中WS_CHARGE_TXT_8X
和WS_CHARGE_8
将指向相同内存块。这允许您以不同的方式查看内存块,在这种情况下,变量可以被视为文本 PIC X 和带符号的数字 PIC S9 。变量名中的 -8X 到 -8 只是风格,表明该变量正在重新转换为其他类型或格式给其他程序员。
在上面的例子中
如果您将 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。