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.
谁能给我一个线索我该如何解决它或者我做错了什么?非常感谢。
解决方案
谁能给我一个线索我该如何解决它或者我做错了什么?
不要使用INITIALIZE
,你没有做错任何事。
基本上,标准COBOL
为数据记录的组织设置了规则。然后它定义INITIALIZE
语句的行为以正确操作这些数据记录。
可变长度表之后的数据项是“可变定位的”。这不符合标准 COBOL,标准 COBOL 要求任何可变长度数据项(在本例中ESTGWABC-S-REG-PEOP
为 )位于record description entry
. 的位置ESTGWABC-S-DEPEN
将根据表中条目的数量而变化,ESTGWABC-S-REG-PEOP
。当表的大小发生变化ESTGWABC-S-DEPEN
时将不再是一个初始化的数据项。
要允许使用INITIALIZE
,必须更改“字帖”。
以下是如何使用INITIALIZE
符合标准的可变长度记录的示例。这是使用带有强制COBOL 85
一致性标志的 Micro Focus 编译器完成的。
$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.
推荐阅读
- php - PHP 如何获取 Amazon API JSON 数组的特定部分
- arrays - 均匀分布数组的常量搜索算法?
- amazon-web-services - AWS API Gateway 软配额
- bash - 为什么我的 sed 命令中没有替换 * 字符?
- swift - 如何在图像分类上快速运行 tflite 模型
- css - 使用 SCSS 变量作为 css 关键帧百分比
- node.js - 如何在 Electron 中使用加密
- python - 使用 Python、Requests 和 BeautifulSoup 陷入无限滚动
- javascript - 关于 JavaScript .reduce 方法的累加器的问题
- android - 在 ImageCapture.Builder 上设置目标分辨率在某些华为设备上不起作用