首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Cobol中初始化可变长度

在Cobol中初始化可变长度
EN

Stack Overflow用户
提问于 2018-05-25 13:17:12
回答 1查看 1.9K关注 0票数 2

我有一本有折页的文案:

代码语言:javascript
复制
(...)
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).
   (...)

在我的程序中,我希望在使用它之前初始化它,所以我执行以下操作:

代码语言:javascript
复制
INITIALIZE                  ESTGWABC-S-OUT
                            REPLACING ALPHANUMERIC BY SPACES
                                           NUMERIC BY ZEROS

但是我得到了一个编译错误:

代码语言:javascript
复制
"ESTGWABC-S-OUT" was found in an "INITIALIZE" statement but was variable-length or variably located. The operand was discarded from the "INITIALIZE" statement.

有人能给我一个线索吗?我怎么解决这个问题?或者我做错了什么?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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一致性完成的。

代码语言:javascript
复制
  $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.
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50530141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档