
長いブランクの後、不定期にCOBOLのソースを読むこともある仕事に就いた者です。
本日見た、
IF 区分1 NOT = "001" AND "002"
という記述について質問致します。
区分1は3桁の数字(でも文字列)が入っているのですが、「区分1が、001かつ002でない場合」ということですよね?
何だかこれって変じゃないですか?
どう変かは、うまく表現できないのですが…これだと、全ての入力レコードがELSEに流れてしまう気がします。
でも、実際はそうではありません。不思議です。
(他にも論理演算子で条件判断をしている箇所がありますので、上記のセクションの判断とは無関係なレコードもあると思います)
どなたか、このモヤモヤを解決して頂けないでしょうか。
No.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'等も真
と意味のない条件になってしまいます。
No.2
- 回答日時:
#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'
どちらも同じ意味になるという事でしょうか?
No.1
- 回答日時:
どこのメーカーのなんと言う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」なもので、ちょっと途方に暮れています。。。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
DLLの呼び出され方が分かりません
-
C言語の本!
-
ソフトの開発言語を調べる方法
-
PICマイコンのプログラムカウン...
-
プログラミングって右脳よりの...
-
bcpadのコンパイラのインストー...
-
エディタとコンパイラ 基礎
-
Win32のIME制御について
-
unsigned long long 型のフォー...
-
C++でデスクトップGUIアプリ開...
-
VBは速度が遅い?
-
COBOLの論理演算子について
-
COBOLのALPHABET...
-
pic
-
python エラー
-
” OS ビルド ” の意味が分か...
-
<unistd.h>をVisualStudioでつ...
-
Windows10エンタープライズ版をインス...
-
他のLinuxでも動くa.outの作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
ソフトの開発言語を調べる方法
-
unsigned long long 型のフォー...
-
printfなど、標準関数のソース...
-
C++でデスクトップGUIアプリ開...
-
組み込みソフト。ROM領域にデータ
-
COBOLのALPHABET...
-
リリースモードとデバッグモー...
-
C++Builder → Visual C++ 移植...
-
COBOLの論理演算子について質問...
-
<conio.h>?
-
パーサとコンパイラの違いって?
-
変数の内容がコロコロ変わる、...
-
HP-UXのプログラムをSolaris、R...
-
for文内での変数定義
-
C++DLLの明示的リンクに関して
-
AIXとCOBOLについて
-
COBOL計算式の中間ワーク桁数に...
-
volatile修飾子について
-
サイクルカウントの方法
おすすめ情報