我有一本有折页的文案:
(...)
05 ESTGWABC-S-OUT.
10 ESTGWABC-S-COD-NUM PIC 9(003).
10 ESTGWABC-S-DESC-COD PIC X(020).
(...)
10 ESTGWABC-S-VAL-PAY PIC 9(015)V99.
10 ESTGWABC-S-QTD-REG PIC 9(002).
10 ESTGWABC-S-REG-PEOP OCCURS 0 TO 20 TIMES
DEPENDING ON ESTGWABC-S-QTD-REG.
15 ESTGWABC-S-CCONTR PIC 9(009).
15 ESTGWABC-S-VAL-PAY PIC 9(015)V99.
10 ESTGWABC-S-DEPEN PIC 9(005).
(...)在我的程序中,我希望在使用它之前初始化它,所以我执行以下操作:
INITIALIZE ESTGWABC-S-OUT
REPLACING ALPHANUMERIC BY SPACES
NUMERIC BY ZEROS但是我得到了一个编译错误:
"ESTGWABC-S-OUT" was found in an "INITIALIZE" statement but was variable-length or variably located. The operand was discarded from the "INITIALIZE" statement.有人能给我一个线索吗?我怎么解决这个问题?或者我做错了什么?非常感谢。
发布于 2018-05-25 16:19:20
有人能给我一个线索吗?我怎么解决这个问题?或者我做错了什么?
不要使用INITIALIZE,你没有做错什么。
基本上,标准COBOL为数据记录的组织设置了规则。然后定义INITIALIZE语句的行为,以正确地操作这些数据记录。
可变长度表后面的数据项是“可变位置”。这不符合标准COBOL,标准COBOL要求任何可变长度的数据项(在本例中为ESTGWABC-S-REG-PEOP )都位于record description entry中的最后一个位置。ESTGWABC-S-DEPEN的位置将根据表ESTGWABC-S-REG-PEOP中条目的数量而改变。当表的大小发生变化时,ESTGWABC-S-DEPEN将不再是初始化的数据项。
为了允许使用INITIALIZE,必须更改“抄写本”。
下面是一个示例,说明如何在符合标准的可变长度记录中使用INITIALIZE。这是通过使用带有标志的Micro编译器来强制COBOL 85一致性完成的。
$set ans85 flag"ans85" flagas"s"
identification division.
program-id. var-len.
data division.
working-storage section.
01 n pic 9(2).
01 a.
02 fixed-part.
03 b pic x(2).
03 c pic 9(2).
02 variable-part.
03 d occurs 0 to 10 depending c.
04 e pic x(2).
04 f pic 9(2).
procedure division.
begin.
initialize fixed-part
perform varying n from 1 by 1 until n > 10
initialize d (n)
end-perform
stop run
.
end program var-len.https://stackoverflow.com/questions/50530141
复制相似问题