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年的标准)。如果还不清楚,请告诉我。