※質問を訂正しました。
古いCOBOL資産の解析がありまして、わからない構文に直面しましたのでご教授いただきたいと思います。
条件式IF文について、以下のような記述の場合、どういう処理になるのでしょうか?
IF A=8500 AND 8600 AND 8700
NEXT SENTENCE
ELSE
~~~ 以下の処理 ~~~
この場合、変数Aは、8500,8600,8700以外の時に、ELSEに入るのでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
わからない構文に直面しましたので
探せばCOBOL文法はたくさん見つかるのではないでしょうか。COBOL文法書
この条件式は省略形です。この形式でORは記述しますがANDは記述しません。なぜか。
IF A=8500 AND 8600 AND 8700
こちらが省略しない条件式です。これがTRUEになりえないのは明らか。まともなプログラムにならないのでANDは記述しないのです。
IF (A=8500) AND (A=8600) AND (A=8700)
pizaでCOBOLを実行できるので試してください。piza COBOL online
IDENTIFICATION DIVISION.
PROGRAM-ID. MULTIPLEANDS.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WORK-AREA.
03 A PIC 9(04) VALUE 8500.
PROCEDURE DIVISION.
00-SAMPLE01 SECTION.
DISPLAY A.
IF A = 8500 AND 8600 AND 8700 THEN
NEXT SENTENCE
ELSE
DISPLAY "ELSE1"
END-IF.
01-SAMPLE02 SECTION.
IF (A = 8500) AND (A = 8600) AND (A = 8700) THEN
NEXT SENTENCE
ELSE
DISPLAY "ELSE2"
END-IF.
99-EXIT.
STOP RUN.
私はCOBOLは読めますが(ほぼ忘れていました)書かないので、誤りがあれば指摘してください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
恐らく誤字。
'NECST SENTENCE'→’NEXT SENTENCE'でEND-IFの次に飛ぶです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
IF A = a1 AND b1 AND c1 THEN
ANDというのが間違いなければ、b1 c1 は、88項目ではないですかね?
データ定義を確認して下さい。
01 FOO.
88 B1 VALUE '1'.
01 BAR.
88 C1 VALUE '2'.
であれば、
IF A = A1 AND FOO = '1' AND BAR = '2' THEN
という意味です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
xebme
2019/06/12 17:12
NECSTはNEXTのことですか。
nitarou
2019/06/12 17:16
すみません、誤字でした。。。。
NEXT SENTENCEです。
xebme
2019/06/12 17:24 編集
a1,b1,c1は変数名ですか。リテラルでなければ、A=a1=b2=c1変数の内容が全て同じという意味。
nitarou
2019/06/12 17:31
a1,b1,c1は便宜上変数にしていましたが、実際は数値です。
IF A=8500 AND 8600 AND 8700
NEXT SENTENCE
ELSE
~~~ 以下の処理 ~~~
この場合、変数Aは、8500,8600,8700以外の時に、ELSEに入るのでしょうか?
すみません、ややこしくしてしまいまして。。。
xebme
2019/06/12 18:23 編集
常に FALSE。従って常にIF false THEN NEXT SENTENCE と読めます。ELSE部分に、どこかからGOTOしてこないですか。ELSEに異常処理が書いてあって...。想像ですが。<-- これは間違い、つねにELSEです。
nitarou
2019/06/12 20:01
常にFALSE。なるほど、そういうことでしたら、Aの値に関係なくELSEになるということですね。まず、こういう書き方ができること自体驚きでしたが、社内では、”実はコードミスなんじゃないの?”という結論に落ち着きそうです。10年以上前のソースなので、作成者すでにはいませんが。。。
xebme
2019/06/12 21:34
気になるようならミニCOBOLプログラムを書いて検証されることをおすすめします。
(ALGOLでIF FALSE ブロックというテクニックがあり、通常は実行しないのですが、エラーのときだけGO TOでブロック内のラベルに飛んできてコードを実行するというのを思い出して、つい、余計なことを言ってしまいました)