在Cobol中,为了测试"null或empty",我们使用"NOT = SPACE [AND/OR] LOW-VALUE"?这是什么?

Tom*_*Tom 10 cobol

我现在正在大型机上工作,在一些模块中进行测试

不为空或空

我们看到: NOT = SPACE OR LOW-VALUE 酋长说我们应该这样做: NOT = SPACE AND LOW-VALUE

哪一个 ?

谢谢!

Nea*_*alB 22

酋长是对的.

COBOL 应该读取类似自然语言的东西(这只是另一个糟糕的笑话).

让我们玩以下变量和值:

 A = 1
 B = 2
 C = 3
Run Code Online (Sandbox Code Playgroud)

表达式如:

IF A NOT EQUAL B THEN...
Run Code Online (Sandbox Code Playgroud)

很容易理解.一个不等于两个,所以我们将做任何事情THEN.然而,

IF A NOT EQUAL B AND A NOT EQUAL C THEN...
Run Code Online (Sandbox Code Playgroud)

更难以遵循.再一个不等于两个而一个不等于三个所以我们将做'THEN'之后的任何事情.

COBOL有一个简短的手工构造,永远不应该使用恕我直言.它让每个人(包括我不时)都感到困惑.简短的表达式让您将以上内容简化为:

IF A NOT EQUAL B AND C THEN...
Run Code Online (Sandbox Code Playgroud)

或者如果您想申请De Morgans规则:

IF NOT (A EQUAL B OR C) THEN...  
Run Code Online (Sandbox Code Playgroud)

我给你的建议是避免NOTexprssions并且永远不要使用COBOL短手表达.

你真正想要的是:

 IF X = SPACE OR X = LOW-VALUE THEN...
    CONTINUE
 ELSE
    do whatever...
 END-IF
Run Code Online (Sandbox Code Playgroud)

当'X'包含空格或低值(空值)时,上述操作无效.它完全相同:

 IF NOT (X = SPACE OR X = LOW-VALUE) THEN
    do whatever...
 END-IF
Run Code Online (Sandbox Code Playgroud)

哪个可以转化为:

 IF X NOT = SPACE AND X NOT = LOW-VALUE THEN...
Run Code Online (Sandbox Code Playgroud)

最后......

 IF X NOT = SPACE AND LOW-VALUE THEN...
Run Code Online (Sandbox Code Playgroud)

我的建议是坚持简单地理解COBOL中更长和更直接的表达,忘记简短的废话.