プロが教える店舗&オフィスのセキュリティ対策術

長いブランクの後、不定期にCOBOLのソースを読むこともある仕事に就いた者です。
本日見た、

IF 区分1 NOT = "001" AND "002"

という記述について質問致します。
区分1は3桁の数字(でも文字列)が入っているのですが、「区分1が、001かつ002でない場合」ということですよね?
何だかこれって変じゃないですか?
どう変かは、うまく表現できないのですが…これだと、全ての入力レコードがELSEに流れてしまう気がします。
でも、実際はそうではありません。不思議です。
(他にも論理演算子で条件判断をしている箇所がありますので、上記のセクションの判断とは無関係なレコードもあると思います)
どなたか、このモヤモヤを解決して頂けないでしょうか。

A 回答 (3件)

>IF 区分1 NOT = "001" AND "002"


>ではなく
>IF 区分1 NOT = '001' AND '002'
>でした。(エクセル関数と混同していました)

私の使用していたCOBOLコンパイラでは、引用符をコンパイラオプションで、「'」と「"」のどちらでも使用できたので、あまり気になりませんでした。

>区分が文字列なら、
>IF 区分1 NOT = '001' AND '002'
>IF 区分1 NOT = '001' OR '002'
>どちらも同じ意味になるという事でしょうか?

IF 区分1 NOT = '001' AND '002'
→IF 区分1 NOT = '001' AND 区分1 NOT = '002'
→'001'は偽、'002'も偽、'003'等は真

IF 区分1 NOT = '001' OR '002'
→IF 区分1 NOT = '001' OR 区分1 NOT = '002'
→'001'は真、'002'も真、'003'等も真
と意味のない条件になってしまいます。
    • good
    • 4
この回答へのお礼

すっきりしました!
本当にありがとうございます。
このサイトと回答者様たちのお陰で、仕事でどれだけ助けられたかわかりません。

お礼日時:2007/09/27 23:56

#1です。



>区分1は3桁の数字(でも文字列)が入っている

データ型は、外部10進なのですよね?
そうであれば、数値の0~9は、文字の'0'~'9'と同じ文字コードになります。
普通は外部10進の定数を、"001"といった書き方はしないと思いますが、質問者さんのお使いのコンパイラでは許されているのでしょう。

#1で説明した通りなら、「IF 区分1 NOT = "001" AND "002"」は、「区分1が、"001"でもなく、"002"でもないなら」ということで、"003"等は真になります。
    • good
    • 0
この回答へのお礼

こんばんは、ご回答ありがとうございます。
すみません、
IF 区分1 NOT = "001" AND "002"
ではなく
IF 区分1 NOT = '001' AND '002'
でした。(エクセル関数と混同していました)

区分が文字列なら、
IF 区分1 NOT = '001' AND '002'
IF 区分1 NOT = '001' OR '002'
どちらも同じ意味になるという事でしょうか?

お礼日時:2007/09/27 00:45

どこのメーカーのなんと言うCOBOLコンパイラでしょうか?



私が使っていたH社のCOBOL85では、「A = a1 or a2」という書き方は、「A = a1 or A = a2」の簡略表記として許されていました。

そのコンパイラのマニュアルでは、標準COBOLと異なる部分は、「このコンパイラによる拡張仕様」と明記されていますが、この部分に関しては明記がなかったので、標準COBOLでもそうなのかも知れません。
    • good
    • 0
この回答へのお礼

>どこのメーカーのなんと言うCOBOLコンパイラでしょうか?
聞いていないのですが、おそらくH社だと思います。

>「A = a1 or a2」という書き方は、「A = a1 or A = a2」の簡略表記として許されていました。
はい、私も「or」なら意味がわかるのですが、今回「and」なもので、ちょっと途方に暮れています。。。

ご回答ありがとうございました。

お礼日時:2007/09/27 00:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています