初始化以下变量时:
01 BATCH-REC.
03 BATCH-VERSION PIC X(2).
03 BATCH-FIELDS PIC X(682).
03 BATCH-REC-01 REDEFINES BATCH-FIELDS.
05 B01-OH-DTL-REC.
07 B01-PE-ID PIC X(12).
07 B01-PMT-DISC-TERMS PIC S9(4) COMP.
07 B01-PMT-DISC-AMT PIC S9(18) COMP.
使用命令
INITIALIZE BATCH-REC.
变量B01-PMT-DISC-TERMS
初始化为值+08224,B01-PMT-DISC-AMT
初始化为+314885530818453536。原因是什么?在初始化之后将空格移动到这些变量是不是一个好主意?我不想更改BATCH-REC代码以在它们上添加默认值。
INITIALIZE
语句不会初始化重新定义的字段。如果要初始化重新定义的字段,则必须以某种方式识别它们。例如,
INITIALIZE BATCH-VERSION BATCH-REC-01
这将根据他们的SPACES
将基本字段初始化为ZEROS
或PICTURE
。 BATCH-FIELDS
不会被初始化。
在这种情况下,以下第3项适用。从2002年的INITIALIZE
标准:
5)每个隐式MOVE或SET语句中的接收操作数通过按顺序应用以下步骤来确定:
a)首先,以下数据项被排除为接收操作数:
- 除了类别数据指针,对象引用或程序指针的数据项外,任何无效接收MOVE语句操作数的标识符。
- 如果未指定FILLER短语,则具有显式或隐式FILLER子句的基本数据项。
- 从属于identifier-1的任何基本数据项,其数据描述条目包含REDEFINES或RENAMES子句,或从属于其数据描述条目包含REDEFINES子句的数据项。但是,identifier-1本身可能具有REDEFINES子句,或者从属于具有REDEFINES子句的数据项。
在这种情况下,我认为你会发现你的INITIALIZE语句确实将你的PIC X数据初始化为空格。您对B01-PMT-DISC-TERMS的值为x'2020',B01-PMT-DISC-AMT的值为x'2020202020202020',前导数字被截止,可能是由于报告的值仅限于18位数的图片子句。
无论如何,我同意@RickSmith并且相信他在解决你的问题方面是正确的。