Cobol 88级编号
如果我这样做:Cobol 88级编号,cobol,Cobol,如果我这样做: 10 ERROR-FLAG PIC X VALUE 'N'. 88 ERROR-FOUND VALUE 'Y'. 88 ERROR-NOT-FOUND VALUE 'N'. 那么我会: SET ERROR-NOT-FOUND TO TRUE 现在,ERROR-FLAG、ERROR-FOUND和ERROR-NOT-FOUND的值是什么 SET ERROR-FOUN
10 ERROR-FLAG PIC X VALUE 'N'.
88 ERROR-FOUND VALUE 'Y'.
88 ERROR-NOT-FOUND VALUE 'N'.
那么我会:
SET ERROR-NOT-FOUND TO TRUE
现在,ERROR-FLAG、ERROR-FOUND和ERROR-NOT-FOUND的值是什么
SET ERROR-FOUND TO TRUE
10级数字将一个字节的存储定义为字母数字,这意味着在没有问题提示的情况下,它可以包含从X'00'到X'FF'的任何位值
这两个88级别不定义存储
88实际上是一种为文字(或某些多个)文字值命名的方法,但它只与它引用的特定字段关联(在本例中为ERROR-FLAG)
这里的ERROR-FLAG是“条件变量”(这仅仅意味着它有一个或多个88级与之关联),每个88级都是“条件名称”
如果您这样做:
10 ERROR-FLAG PIC X VALUE 'N'.
88 ERROR-FOUND VALUE 'Y'.
88 ERROR-NOT-FOUND VALUE 'N'.
然后
将是真实的,并且
IF ERROR-NOT-FOUND
不会是真的
该集合与以下内容相同:
IF ERROR-FOUND
MOVE "N" TO ERROR-FLAG
且IF与以下内容相同:
IF ERROR-FOUND
MOVE "N" TO ERROR-FLAG
88和设置的优点是改变它所指的字段的值,并且减少了维护
请记住,条件名称不定义存储(严格来说,有与其关联的存储,但它只包含一个文本,您无法有效地访问它)
因此将ERROR-NOT-FOUND设置为TRUE
(很好的间距,非常好)不会对ERROR-NOT-FOUND执行任何操作(无法执行任何操作),而是将值“N”放在ERROR-FLAG中
因此将ERROR-FOUND设置为TRUE
不会对ERROR-FOUND执行任何操作,而是将值“Y”放在ERROR-FLAG中
按顺序编码这两个SET语句只会导致错误标志为“Y”(第一个集合是冗余的)
88级别的SET语句生成与MOVE语句相同的代码(或者应该/可以,不知道所有编译器)。您可以使用该集合,这样就不会因为输入错误(或不称职)而意外地弄乱标志的值
更好的标志/开关结构是:
IF ERROR-FLAG EQUAL TO "N" *> for the IF ERROR-NOT-FOUND
当您为条件变量命名时,就像您在示例中所做的那样,有人可以编写一个MOVE
来引用它,并键入值,或者使代码分析更加困难。使用FILLER定义无法从过程部分引用的字段可以防止这种情况发生。定义的数据只能通过SET和IF(查询值)访问
守则应包括:
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'.
开始每次处理迭代(最好不要依赖于值,因为每次都必须重新设置),然后在确定需要标志的特定症状时单独设置语句
不是,88可以有多个值。例如,值“A”“Q”“V”到“Z”。进行设置时,使用的值是value语句“A”中首先提到的值
看到这个答案,还有一些其他答案的链接:对于亲密的选民来说,他们问的问题是完全清楚的。我不能回答,也不知道任何cobol。。。但问题对我来说也很清楚。在这种情况下,最好将ERROR-FLAG保留为unnamed或FILLER,这样就不能直接引用它。这就省去了有人跟踪你并添加“将‘a’移动到错误标志”并完全搞乱一切的麻烦。这是否意味着如果ERROR-FOUND设置为True,则ERROR-NOT-FOUND将自动设置为false,反之亦然?@Codingman更新是否涵盖了这一点?ERROR-NOT-FOUND未设置为任何值。COBOL中没有“真”或“假”,集合中除外(假超出了1985年的标准)。如果还不清楚,请告诉我。