- ベストアンサー
COBOLの論理演算子についての疑問とは?
- COBOLの論理演算子についての疑問を持つ仕事に就いた者がいます。
- IF区分1 NOT = '001' AND '002'という記述について疑問を持っています。
- どういう動作をしているのか理解できず、入力レコードがELSEに流れるのではないかと心配しています。
- みんなの回答 (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'等も真 と意味のない条件になってしまいます。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1です。 >区分1は3桁の数字(でも文字列)が入っている データ型は、外部10進なのですよね? そうであれば、数値の0~9は、文字の'0'~'9'と同じ文字コードになります。 普通は外部10進の定数を、"001"といった書き方はしないと思いますが、質問者さんのお使いのコンパイラでは許されているのでしょう。 #1で説明した通りなら、「IF 区分1 NOT = "001" AND "002"」は、「区分1が、"001"でもなく、"002"でもないなら」ということで、"003"等は真になります。
お礼
こんばんは、ご回答ありがとうございます。 すみません、 IF 区分1 NOT = "001" AND "002" ではなく IF 区分1 NOT = '001' AND '002' でした。(エクセル関数と混同していました) 区分が文字列なら、 IF 区分1 NOT = '001' AND '002' IF 区分1 NOT = '001' OR '002' どちらも同じ意味になるという事でしょうか?
- chukenkenkou
- ベストアンサー率43% (833/1926)
どこのメーカーのなんと言うCOBOLコンパイラでしょうか? 私が使っていたH社のCOBOL85では、「A = a1 or a2」という書き方は、「A = a1 or A = a2」の簡略表記として許されていました。 そのコンパイラのマニュアルでは、標準COBOLと異なる部分は、「このコンパイラによる拡張仕様」と明記されていますが、この部分に関しては明記がなかったので、標準COBOLでもそうなのかも知れません。
お礼
>どこのメーカーのなんと言うCOBOLコンパイラでしょうか? 聞いていないのですが、おそらくH社だと思います。 >「A = a1 or a2」という書き方は、「A = a1 or A = a2」の簡略表記として許されていました。 はい、私も「or」なら意味がわかるのですが、今回「and」なもので、ちょっと途方に暮れています。。。 ご回答ありがとうございました。
お礼
すっきりしました! 本当にありがとうございます。 このサイトと回答者様たちのお陰で、仕事でどれだけ助けられたかわかりません。