gpt4 book ai didi

cobol - 88级数

转载 作者:行者123 更新时间:2023-12-04 14:11:51 24 4
gpt4 key购买 nike

10  ERROR-FLAG              PIC X VALUE 'N'.
88 ERROR-FOUND VALUE 'Y'.
88 ERROR-NOT-FOUND VALUE 'N'.

如果我做:
SET ERROR-NOT-FOUND               TO TRUE

然后我这样做:
SET ERROR-FOUND                   TO TRUE

现在,ERROR-FLAG、ERROR-FOUND 和 ERROR-NOT-FOUND 的值是什么?

最佳答案

10  ERROR-FLAG              PIC X VALUE 'N'.
88 ERROR-FOUND VALUE 'Y'.
88 ERROR-NOT-FOUND VALUE 'N'.

10 级数字将存储的一个字节定义为字母数字,这意味着它可以毫无问题地包含从 X'00' 到 X'FF' 的任何位值。

两个 88 级定义无存储。

88 实际上是一种为文字(或多个)文字值命名的方法,但仅将其与它引用的特定字段相关联(在这种情况下为 ERROR-FLAG)。

这里的 ERROR-FLAG 是“条件变量”(这只是意味着它有一个或多个与之关联的 88 级),每个 88 级都是一个“条件名称”。

如果你这样做:
SET ERROR-NOT-FOUND                   TO TRUE     

然后
IF ERROR-NOT-FOUND

将是真的,并且
IF ERROR-FOUND

不会是真的。

SET 与以下内容相同:
MOVE "N"                              TO ERROR-FLAG

IF 与以下内容相同:
IF ERROR-FLAG EQUAL TO "N" *> for the IF ERROR-NOT-FOUND

88 和 SET 更改它所引用的字段值的优点是文档化的,并且减少了维护。

请记住,条件名称不定义存储(严格地说,有与之关联的存储,但它只包含一个文字,您不能有效地访问它)。

所以 SET ERROR-NOT-FOUND TO TRUE (很好的间距,非常好)对 ERROR-NOT-FOUND 没有任何作用(没有什么可以做的),但将值“N”放在 ERROR-FLAG 中。

所以 SET ERROR-FOUND TO TRUE对 ERROR-FOUND 不做任何处理,但在 ERROR-FLAG 中放置值“Y”。

按顺序对这两个 SET 语句进行编码只会以 ERROR-FLAG 为“Y”结束(第一个 SET 将是多余的)。

88 级的 SET 语句生成与 MOVE 语句相同的代码(或者应该/可能,不知道所有编译器)。您使用 SET 以便您不会因拼写错误(或无能)而意外弄乱标志的值。

标志/开关的更好结构是:
01  FILLER.
10 FILLER PIC X.
88 ERROR-FOUND VALUE 'Y'.
88 ERROR-NOT-FOUND VALUE 'N'.
10 FILLER PIC X.
88 AMOUNT-NUMERIC VALUE 'Y'.
88 AMOUNT-NOT-NUMERIC VALUE 'N'.

当你给条件变量一个名字时,就像你在你的例子中所做的那样,有人可以编码 MOVE引用它,并拼写该值,或者使代码分析更加困难。使用 FILLER 来定义无法从 PROCEDURE DIVISION 中引用的字段,可以防止这种情况发生。定义的数据只能通过 SET 和 IF(查询值)访问。

该代码将具有:
SET ERROR-NOT-FOUND     
AMOUNT-NOT-NUMERIC TO TRUE

开始每次处理迭代(最好不要依赖 VALUE,因为无论如何您每次都必须重新设置),然后在识别需要标志的特定症状时执行单独的 SET 语句。

不是,88 可以有多个值。例如,值“A”“Q”“V”到“Z”。执行 SET 时,使用的值是 VALUE 语句中第一个提到的值,在本例中为“A”。

请参阅此答案,并附有许多其他答案的链接: https://stackoverflow.com/a/21338755/1927206

关于cobol - 88级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com