• ベストアンサー

COBOLのEVALUATE文について

COBOLのEVALUATE文についてですが、以下の場合の解釈はどうなるのでしょうか? EVALUATE A=O ALSO B=0 ALSO C=0 WHEN FALSE ALSO TRUE ALSO TRUE PERFORM  Z処理 (1)A≠O かつ B=0 かつ C=0の場合のみZ処理を行う。 (2)A≠OであればZ処理を行う。 (1)(2)のどちらが正解でしょうか? すいませんが、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#9189
noname#9189
回答No.1

(1)が正解です。

yoneyoneyone
質問者

お礼

おりがとうございました。 すっきりしました^^

関連するQ&A

  • COBOLについて

    COBOLのEVALUATE文についてですが、 EVALUATE TRUE WHEN A =B かつ C = D 処理 WHEN E =F かつ G = H 処理 ・    ・ END-EVALUATE. 上記のような条件で最初のWHENの式からいずれかの式に一致した場合、 一致した以降の式は実行しないのでしょうか? (例:'A =B かつ C = D'と'E =F かつ G = H'の両方の式が合致した場合) ・A =B かつ C = Dに合致した場合の処理を実行し、WHEN E =F かつ G = H以降の  処理は実行しないという事でしょうか?  EVALUATE TRUEの場合、'A =B かつ C = D'と'E =F かつ G = H'の式が両方とも  一致した場合は両方の処理を実行すると思うのですが、どう処理されるのか教えて  下さい。  

  • COBOLのEVALUATE文

    COBOLのEVALUATE文について質問です。 EVALUATE文で 10 > A > 20 という条件を書く場合どういう書き方をすればよろしいのでしょうか?? すみませんが、宜しくお願いします。

  • COBOLで文字変数Aと絶対に一致しない特殊値は?

    COBOLでプログラミングをしています。ある変数AとBがあり、どちらも領域はPIC X(1)です。 この変数Aを、いかなるときでも変数Bと一致させたくないとき、Bに入れる「END OF FILE」のような特殊な値って無いのでしょうか? そのような値が存在するならば、AかBにその特殊な値を入れておけばいいと思うのですが、 もし無いとすれば、以下のような処理をスマートにCOBOLで作るには、どのように作るのが一般的ですか? PERFORM文を用いて終了条件がA=Bのとき、 最初の処理では必ずPERFORMの中の処理を行い、 2回目からは終了条件で実行するかどうかを判定するような処理 よろしくお願いします。

  • Evaluateを使ってマクロに記述した関数に変数を使う方法

    Evaluateを使ってマクロに記述した関数に変数を使う方法 "=SUMPRODUCT((ISERROR(FIND(A1,B1:B100))=FALSE)*(C1:C100<=10))" という関数を普段使用しています。 ふとこの関数をマクロで実行させようと思い(理由はありません、思い付きです)、 Range("D1").Value = Evaluate("SUMPRODUCT((ISERROR(FIND(A1,B1:B100))=FALSE)*(C1:C100<=10))") としてみました。うまくいきました。 次に、 Dim i As Long For i = 1 To 5 Range("D" & i).Value = Evaluate("SUMPRODUCT((ISERROR(FIND(A1,B1:B100))=FALSE)*(C1:C100<=10))") next としてみました。ここで考えたのですが、 FIND(A1,B1:B100) この部分の「A1」を「i」を使って(つまりRange("D" & i)に連動させて)変数にすることは出来るのでしょうか? ご教示願います。 今回は単なる好奇心で普段使っている関数をマクロで表現できないかなと思った次第で、どうしても知りたい!必要だ!というわけではありません。 お暇なときにお願いします。

  • COBOLについて

    COBOL初心者なのですが。 COBOLで 01 A.   03 B PIC 9(02).   03 C PIC X(02). MOVE  SPACE  TO  A. とした時、基本項目であるBには何が入っているのでしょうか? 数字項目にSPACEというのはありえないですよね。 どなたかわかる方、教えていただけませんか?

  • COBOL

    すごい簡単な問題なんで恐縮します。COBOL超初心者です。 通信学習で学んでるのですが、テキストに詳しく載っていないので行き詰っています。 下記A, B, Cの値を求めなさい。 MOVE 9 TO A. COMPUTE B = A / 3 COMPUTE C = A + B COMPUTE A = A * 2 で、私が考えた答は、 A = 18 B = 3 C = 12     です。 自分の出した答に全く自信がありません。 どなたか、合っているか教えて下さいませんか? そして、間違っている場合、答の求め方を教えて下されば幸いです。 宜しくお願いいたします。

  • COBOLについて

    COBOLで以下のような仕様の場合、どのようなロジックにするのが良いでしょうか? ・仕様  A項目=値A または  B項目=値B または  (C項目=値C かつ D項目=値D ) または  E項目=値E 上記の場合、何も処理しない(以降の処理もせずに、次レコードを読みに行く  上記以外の場合、処理1を行い、次処理以降の処理を継続する。 (ロジック1) IF A項目=値A OR B項目=値B OR (C項目=値C かつ D項目=値D ) OR E項目=値E THEN CONTINUE ELSE 処理1を行う END-IF. (ロジック2) IF A項目=値A MOVE '1' TO 該当フラグ END-IF. IF B項目=値B MOVE '1' TO 該当フラグ END-IF. IF (C項目=値C かつ D項目=値D ) MOVE '1' TO 該当フラグ END-IF. IF E項目=値E MOVE '1' TO 該当フラグ END-IF. IF 該当フラグ='1' CONTINUE ELSE 処理1 END-IF. 自分は仕様に沿ってロジック1で組むべきだと思うのですが、 ロジック1は分かりずらいのとメンテが大変なのでロジック2で組むべきだと言われました。 どちらで組むのが普通でしょうか?どなたか教えて下さい!

  • COBOLでのファイル作成方法

    初歩的な質問となりますが悩んでいます。作成方法について教えていただける方いらっしゃいましたら、よろしくお願いします。 【質問内容】 2つのファイルをマッチングさせて出力ファイルを作成しています。 入力1:売上ファイル(URIF)   顧客ID,氏名,売上日,担当者ID(KOKID,NAME,URIYMD,TANTOU)   0001,A田B夫,20101105,1201   0002,C下D介,20101106,1305   0003,E岡F子,20101107,1103 入力2:売上明細ファイル(MEISAIF)   顧客ID,商品区分,金額(KOKID,KUBUN,KINGAK)   0001,01,10500   0001,03,5250   0002,01,3150   0002,02,1575   0002,03,2100   0003,02,1050   0003,03,7350 出力:売上詳細ファイル(SYOUSAIF)   顧客ID,氏名,売上日,担当者ID,金額1,金額2,金額3(KOKID,NAME,URIYMD,TANTOU,KINGAK1,KINGAK2,KINGAK3)   0001,A田B夫,20101105,1201,10500,   ,5250   0002,C下D介,20101106,1305,3150,1575,2100   0003,E岡F子,20101107,1103,   ,1050,7350 IF URIF-KOKID = MEISAIF-KOKID  THEN    PERFORM WITH TEST BEFORE       UNTIL URIF-KOKID > MEISAIF-KOKID      PERFORM MAKE-PROC    END-PERFORM    PERFORM MEISAIF-READ-PROC  ELSE    IF URIF-KOKID > MEISAIF-KOKID     THEN      PERFORM MEISAIF-READ-PROC         UNTIL MEISAI-KOKID NOT < URIF-KOKID     ELSE      PERFORM WITH TEST BEFORE         UNTIL MEISAI-KOKID NOT > URIF-KOKID        PERFORM URIF-READ-PROC      END-PERFORM    END-IF END-IF. MAKE-PROC SECTION. MAKE-PROC-010.  MOVE URIF-KOKID TO SYOUSAIF-KOKID.  MOVE URIF-NAME TO SYOUSAIF-NAME.  MOVE URIF-URIYMD TO SYOUSAIF-URIYMD.  MOVE URIF-TANTOU TO SYOUSAIF-TANTOU.  EVALUATE MEISAI-KUBUN   WHEN '01'    MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK1   WHEN '02'    MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK2   WHEN '03'    MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK3  END-EVALUATE. 上記のように作成してみると、出力されたデータが以下のようになってしまいます。   顧客ID,氏名,売上日,担当者ID,金額1,金額2,金額3   0001,A田B夫,20101105,1201,10500,   ,      0001,A田B夫,20101105,1201,10500,   ,5250   0002,C下D介,20101106,1305,3150,   ,      0002,C下D介,20101106,1305,3150,1575,      0002,C下D介,20101106,1305,3150,1575,2100   0003,E岡F子,20101107,1103,   ,1050,      0003,E岡F子,20101107,1103,   ,1050,7350 どのようにしたら本来の1件化した形にできるのか考えているのですが、 一向に解決する方法が見つかりません。 もし解決策があるようでしたらご指導願いたく思います。 よろしくお願いします。

  • cobolのコントロールブレイク

    趣味の一環としてcobolのファイル入出力プログラムを勉強しているのですが、 リング構造を利用したコントロールブレイク機能の実装で躓いてしまいました。 知恵をお貸しいただければ幸いです。 ソースコードここから IDENTIFICATION DIVISION. PROGRAM-ID. BREAKDV1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INF ASSIGN TO "C:\cobol\sample.cbl" STATUS FST. SELECT OUF ASSIGN TO "C:\cobol\data.txt". DATA DIVISION. FILE SECTION. FD INF. 01 F1R PIC X(72). WORKING-STORAGE SECTION. 01 INKEY PIC 9(01). 01 SAVKEY PIC 9(01). 01 FST PIC X(02). PROCEDURE DIVISION. ACCEPT INF OPEN INPUT INF OUTPUT OUF PERFORM 読込処理 THRU 読込出口 PERFORM UNTIL INKEY = HIGH-VALUE MOVE SAVKEY TO INKEY PERFORM UNTIL INKEY NOT = SAVKEY PERFORM 同一処理 THRU 同一出口 PERFORM 読込処理 THRU 読込出口 END-PERFORM PERFORM 合計処理 THRU 合計出口 END-PERFORM PERFORM 総計処理 THRU 総計出口 CLOSE INF OUF STOP RUN. 同一処理. DISPLAY "SAME" WRITE F1R DISPLAY F1R 同一出口. EXIT. 合計処理. DISPLAY "TOTAL" 合計出口. EXIT. 総計処理. DISPLAY "END" 総計出口. EXIT. 読込処理. PERFORM UNTIL FST NOT "00" READ INF END MOVE HIGH-VALUE TO INKEY NOT END CONTINUE END-READ END-PERFORM 読込出口. EXIT. ソースコードここまで(処理内容は仮のものです) 参考文献ではこのような組み方でよいはずなのですが、コンパイルした際に BREAKDV1.cbl:19: Error: syntax error, unexpected "end of file" とエラーが発生してしまいました。 このエラーを解消する方法をお教え下さい。 開発環境: Windows7SP1+MinGW32、サクラエディタ

  • Evaluate()に数式を代入した変数を渡すには

      VB.NETでEvaluate()関数を使って、プログラム実行中に決まる数式を評価させたいのですが、(1)のように数式をリテラルのまま渡せば正しく評価されるのですが、(2)のように数式を変数に代入して渡すとうまくいきません。数式の構造自体がプログラムの実行中に決まるので、数式を代入した変数を引数として渡す必要がありますが、このような場合、どのようにすればよいのでしょうか。 (1) 引き渡す数式がリテラルの場合 Imports Microsoft.Office.Interop Module Module1  Sub Main()   Dim xlApp As New Excel.Application   Dim x As Integer   x = 1   MsgBox(xlApp.Evaluate(x = 1)) '期待 True  実際 True  結果 OK   MsgBox(xlApp.Evaluate(x <> 1)) '期待 False  実際 False  結果 OK  End Sub End Module (2) 引き渡す数式が代入された変数の場合 Imports Microsoft.Office.Interop Module Module1  Sub Main()   Dim xlApp As New Excel.Application   Dim x As Integer   Dim term1 As String   Dim term2 As String   x = 1   term1 = "x = 1"   term2 = "x <> 1"   MsgBox(xlApp.Evaluate(term1)) '期待 True  実際 -2146826259 結果 NG   MsgBox(xlApp.Evaluate(term2)) '期待 False  実際 -2146826259 結果 NG  End Sub End Module よろしくお願いします(WindowsXP,VS2010)

専門家に質問してみよう