在Cobol中初始化变长

时间:2018-05-25 13:17:13

标签: initialization cobol

我有一本以下的字帖:

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

任何人都可以告诉我如何解决它或我做错了什么?非常感谢你。

1 个答案:

答案 0 :(得分:5)

  

任何人都可以告诉我如何解决它或我做错了什么?

不要使用INITIALIZE而你没有做错任何事。

基本上,标准COBOL为数据记录的组织设置规则。然后,它定义INITIALIZE语句的行为,以正确操作这些数据记录。

可变长度表之后的数据项是“可变位置”。这不符合标准COBOL,后者要求任何可变长度数据项(在本例中为ESTGWABC-S-REG-PEOP)位于record description entry的最后。 ESTGWABC-S-DEPEN的位置将根据表格ESTGWABC-S-REG-PEOP中的条目数量而变化。当表格大小更改ESTGWABC-S-DEPEN时,将不再是初始化的数据项。

要允许使用INITIALIZE,必须更改“字帖”。

以下是如何将INITIALIZE与符合标准的可变长度记录一起使用的示例。这是通过带有标记的Micro Focus编译器完成的,以强制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.