在COBOL中,以下条件何时计算为true
那条线在COBOL中,以下条件何时计算为true,cobol,Cobol,那条线 01 ws-var-05 pic x value 'n'. 88 ws-var-88 value 'y' 01 ws-var-2 pic 9 value 1. 88 ws-var-88-2 value 2. . . . * comment ws-var-88-2 is set to true when eof is * reached in the at end clause of read statement * need to understand when ws-v
01 ws-var-05 pic x value 'n'.
88 ws-var-88 value 'y'
01 ws-var-2 pic 9 value 1.
88 ws-var-88-2 value 2.
.
.
.
* comment ws-var-88-2 is set to true when eof is
* reached in the at end clause of read statement
* need to understand when ws-var-05 evaluates to
* true! Is this right syntax? What happens if we use
* this syntax? Need to understand if this is a
* defect
Perform 1000-para until ws-var-88-2 or ws-var-05.
…包含语法错误,至少在使用GNU COBOL 1.1.0编译时是这样
PERFORM动词的UNTIL子句可以包含条件表达式。条件表达式的一种类型是88级的条件名称条件。但是,在本例中,标识符的名称ws-var-05后面必须跟一个条件运算符,=,等等,然后是另一个标识符或一个文本,直到子句有效
这是正确的语法吗
没有
如果我们使用这种语法会发生什么
将发生编译时错误。有几件事
最好将支持条件项的存储保留为未命名。这可以防止人们意外地将错误的值移动到它们中,并导致细微的错误
例如,这:
Perform 1000-para until ws-var-88-2 or ws-var-05.
最好这样写:
01 ws-var-05 pic x value 'n'.
88 ws-var-88 value 'y'
01 ws-var-2 pic 9 value 1.
88 ws-var-88-2 value 2.
因此,没有人会意外地将“Y”移动到ws-var-05。这在大型机上尤其有问题,因为在大型机上有一些自动大写编辑器选项,很难注意到“y”和“y”之间的区别
在这种情况下,有几种情况,ws-var-05不是一个完整的条件,您可以使用ws-var-88或ws-var-88-2,它将是一个完整的条件
最后不需要句点,而且在现代编译器中它的使用经常会有问题。自Cobol-85以来,END verbname是终止命令的首选方式。你可以这样写:
01 pic x value 'n'.
88 ws-var-88 value 'y'.
01 pic 9 value 1.
88 ws-var-88-2 value 2.
作为:
或者,IMNSHO,一种更清晰、更清晰的方法,因为它将终止条件与您将在执行主体中执行的命令分离:
Perform 1000-para until (ws-var-88 or ws-var-88-2)
我还将始终使用parens来界定我预期的操作顺序,尽管在这种情况下,这并不重要。对于更复杂的情况,它们可以为那些必须在凌晨3点看到爆炸的待命程序员提供很大的帮助
您可以这样触发终止条件:
Perform until (ws-var-88-2 or ws-var-88-2)
Perform 1000-para
End-Perform
您的问题只能通过检查设置您要询问的变量的代码部分来回答。谢谢你。
Perform until (ws-var-88-2 or ws-var-88-2)
Perform 1000-para
End-Perform
1000-para.
Read myfile
at end
set ws-var-88-2 to true
End-Read
If (something-else = time-to-quit)
set ws-var-88 to true
End-If
Exit. *> One of the few places you need a period
*> in modern cobol, adding the "Exit" or
*> "Continue" NOPs clearly calls out to a
*> reader that you are using a period.