2016-05-03 10 views
0

を評価:OR演算子は、内部の私は、このようにOR演算子を使用することができるかどうかを知りたいの文COBOL

EVALUATE TRUE 
    WHEN (COD-USER NOT EQUAL TO 01) OR (COD-USER NOT EQUAL TO 02) 
     ADD 1 TO CTN-ERROR 

    WHEN 
    ... 

END-EVALUATE 

私はそれがIFを使用して動作すると思いますが、私はこの文でそれを行う必要があります。私はカッコを異なる位置に置こうとしましたが、うまく機能しませんでした。

私はまた、次のようなさまざまな文章を使用しようとしましたと私は無効な式のエラーを得た:

I would like to know if i can use the OR operator in this way:

...

COD-USER NOT EQUAL TO 01 OR 02 
+0

本能的には、私は「はい」と言っていますが、その場合は、行うのが一番です。モックアップした小さなプログラムを作成し、COD-USERの値を異なるレベルに強制し、ディスプレイでそれを実行し、何が起こるかを確認します。 – gazzz0x2z

+0

@ gazzz0x2zまあ、私はあなたが言ったことをした、それは完全に働いた。要点は、メインプログラムがOR節の次の行にエラーを表示し続けていることです。問題は別の部分から来ていないことを確認するためにWHENステートメント内のすべてのコードをチェックしています。 – demoN

+1

さて、そのような 'OR'を使うことができますが、その正確な例ではそうするのはかなり役に立たないです。 3つのテストケースを考えてみましょう。 01、02、03です。最初は02ではなく拒否され、01ではなく2番目に拒否され、03でも02でもないので拒否されました。他にもいくつかの方法があります。 –

答えて

1

あなたの質問への答え...されます"はい。"しかし...

これはあなたが望むものですか? COD-USERが1である場合

[...] 
    05 WS-COD-USER PIC 99 VALUE ZEROES. 
     88 DONT-ADD-1-TO-CTN-ERROR VALUES 1, 2. 
[...] 
    MOVE COD-USER TO WS-COD-USER 
    EVALUATE TRUE 
     WHEN DONT-ADD-1-TO-CTN-ERROR 
      CONTINUE 
     WHEN OTHER 
      ADD 1 TO CTN-ERROR 
    END-EVALUATE 

これは、これはCOD-USERCTN-ERRORに追加される任意の他の値が1である場合に2であるCTN-ERRORCOD-USER場合に1を追加しないであろうCTN-ERRORに1を追加しないであろう。

私はCOD-USERFDまたはコピーブックにあると推定しています。それ以外の場合は、それに続いて88レベルを追加することもできます。あなたの例では

+0

はい、これは方法の1つです。しかし、1つのアクションだけを持つ複数のWHENを使用すると、完全に有効で正しいものの、1)多くのプログラマーにとって「珍しい」2)誤って削除された行があるように見える。私は、TRUE(またはFALSE以外)を評価することに熱心ではありませんが、PROCEDURE DIVISIONでリテラルの使用を強制するので、それを使用するには実際の意味はありません。第二のものとしての88sの使用、そして私の好みの方法につながる。 –

+0

@BillWoodger 1)私はこれを「教えることのできる瞬間」と考えていました。2)この場合、手続き部のリテラルに同意します。私は少なくとも侵入のルールに従っていた、おそらく一貫していなかった。別の教えることのできる瞬間かもしれない。私は2の絶対主義者ではなく、05 PIC 9 VALUE 1と05 BLUE PIC X(5)VALUE 'BLUE'を見ました。 – cschneid

+0

はい、同じことを常に意味する単純な数(xに1を加える)はリテラルでなければなりません。パレットあたりの最小アイテム数は説明的でなければなりません。青は確かに無意味ですが、文脈上の名前でなければなりません。 by、1つのPIC 9 VALUE ZEROは、コーダーが「ループすることはできません、見て、私はそれに追加します」というメッセージが楽しいです:-) –

1

、あなたは常にADD 1 TO CTN-ERROR

ないあなたは、他のWHEN年代があるか、何をCOD-USERが01であるとするときに発生しますしたいのかわからCOD-USERは02であるとき、あなたが欠けている場合は、あなたの

EVALUATE COD-USER 
    WHEN 01 
     DO-SOMETHING 
    WHEN 02 
     DO-SOMETHING-ELSE 
    WHEN OTHER 
     ADD 1 TO CTN-ERROR 
END-EVALUATE 

OR

EVALUATE TRUE 
    WHEN COD-USER = 01 
     DO-SOMETHING 
    WHEN COD-USER = 02 
     DO-SOMETHING-ELSE 
    WHEN OTHER 
     ADD 1 TO CTN-ERROR 
END-EVALUATE 
COD-USERは01または02の場合にのみ、あなたのような何かを試みることができる何かにコード

これは、01または02でマッチするときに必要なことを行い、それ以外のものはカウントに1を加算します。

0

はい、あなたはORを使うことができますが、コードを書いたやり方は、上記の答えにすでに述べられているように常に真です。二回も書き込むことができる場合、上記の例では

EVALUATE TRUE 
    WHEN COD-USER = 01 
    WHEN COD-USER = 02 
    CONTINUE 
    WHEN OTHER 
    ADD 1 TO CTN-ERROR 
END-EVALUATE 

下に示すように、COD-USER = 01又はCOD-USER = 02、それは継続され、他のすべての条件について、それがCTN-ERRORに1を追加します

+0

これは@cschneidが元々持っていた答えです。 http://stackoverflow.com/questions/37002635/or-operator-inside-evaluate-statement-cobol#comment61574035_37008057 –

+0

それに加えて、先頭のゼロの使用についても熟考しましたか? –

関連する問題