• 締切済み

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で組むべきだと言われました。 どちらで組むのが普通でしょうか?どなたか教えて下さい!

みんなの回答

回答No.5

「自分は仕様に沿ってロジック1で組むべきだと思う」 貴方の思ったとおりにやりましょう。

この投稿のマルチメディアは削除されているためご覧いただけません。
回答No.4

さっきも書いたように、(ロジック1)を提案すべきだと思います。

この投稿のマルチメディアは削除されているためご覧いただけません。
回答No.3

オレもロジック1は分かりやすいと思うよ。 オレはCOBOL知らないから スゴく古いCUIの「Dbase5」にCOBOLが ほんのチョッピリ似てるから推測で話してますが 「Dbase5」知っているから それから考えると、ロジック1が解りやすいと思うな。 モット言うと、「コンピューターがやるのだから、どっちでもいい。」 ヤット推測できた。 キミの会社の「ホストマシン」についてだな。 オレは「システム部門」なんて闇の部署に所属した経験がない。 オレはメチャクチャ明るい元「必殺営業マン」だったのだ。 今は売れないシステムエンジニアだ。 話戻るけど、ロジック1、ロジック2どっちでもいいよ。 ホストコンピューターに負荷をかけない事を考えるとロジック1だ。 自信を持って提案し給え!

  • notnot
  • ベストアンサー率47% (4835/10236)
回答No.2

会社によるとしか言いようが無いです。 コーディングルールがある場合はそれに従う。 そう言われたと言うことは「IFの条件ではORを使わない」というルールがあるのでは? 一般的には、ロジック1でしょう。 あなたの書いたロジック2には、該当フラグを初期化していないというバグがあります。ロジック2には、そういうバグの入り込む危険がありますね。というか、仕様に無い「該当フラグ」が登場するのが最大の欠点です。

回答No.1

ハジメマシテ。 イマダニCOBOLを使っている企業は ある程度の大企業だと言った観があります。 私も一応1部上場にお世話になっておりました。 ただ、コンピューター部門ではなく 営業部門です。 辞表出する前は「ACCESS」を使いこなせるようになりました。 デモ今は忘れています。 本題に戻りましょう。 時代は「JAVA」「C++」と進んでいます。 イマダニCOBOLを使っていることは 動きの鈍い所謂「大企業病」です。 ダイナミックな動きをする中小企業では 新しいプログラミング・ソフトを使っていることと 予測します。 ここで答えが出ない場合は、自分自身 若しくは職制。それに準じる人に質問スべきです。 COBOLなんて昔お世話になった会社と 後少しあると思いますが、稀でしょう。 まともに回答できず、申し訳ありません。 デモ、これがオレ流の答えです。

関連するQ&A

  • コボル!!!!!

    今コボルを習い始めています! 分からないことがあったので教えてください! IF (フラグ-終了-A   =   "END") AND  (フラグ-終了-B   =   "END") MOVE "END" TO フラグ-終了 END IF. とはどう言う意味ですか? 後、 COMPUTE    A  =  B  -  C どの様な動きをしているのか教えてください、よろしくお願いします。

  • エクセルでの関数の書き方

    セルA1からF1があります。 A1がC1かD1で同じでかつ B1がC1かD1で同じ場合に、 D1の値をF1にセットしたいのですが、 どのように書けばよろしいでしょうか? EX. A1が1でB1が2の場合は C1がD1が1,2または2,1の場合のみ E1の値をF1にセットします。 COBOLで書くとこんな感じになると思います IF (A1=C1 OR A1=D1) AND (B1=C1 OR B1=D1) THEN MOVE D1 TO F1 END-IF. IF関数かAND関数を使用するような気がしますが、 思いつきません。 よろしくお願いいたします。 エクセル2000です。

  • COBOL 2次元配列について

    COBOL の2次元配列(?)について質問です。 例えば 01 A ...03 B OCCURS 5 ......05 C .........07 D OCCURS 10 ............09 E ............09 F とある場合、個々の E,F にアクセスするには どのように記述すればいいのでしょうか。。 MOVE 1 TO E(1,1) や、 MOVE 1 TO A(1,1) ではダメでした…。 よろしくお願いします。

  • COBOLについて

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

  • 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でのファイル作成方法

    初歩的な質問となりますが悩んでいます。作成方法について教えていただける方いらっしゃいましたら、よろしくお願いします。 【質問内容】 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超初心者です。 通信学習で学んでるのですが、テキストに詳しく載っていないので行き詰っています。 下記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 OCCURSで指定したデータの参照の仕方

    IBM COBOL でプログラムを作成しています。 初歩的な質問で恥ずかしいのですが、どなたか教えていただけますか。 まず、以下のようなTABLEを定義しました。 01 A-TABLE. 03 B OCCURS 100. 05 C PIC X(08) VALUE SPACE. 05 D PIC X(02) VALUE SPACE. 05 E PIC X(08) VALUE SPACE. 05 F PIC X(05) VALUE SPACE. 05 G PIC X(05) VALUE SPACE. 05 H PIC X(05) VALUE SPACE. その後に、INPUTファイルからREADしたデータのうち、必要な部分だけを 該当のTABLEに添え字を使用して代入していく処理を作成したいと思っています。 その場合に、上記の「C」~「H」に代入するにはどうすればよいでしょうか? また後続の処理で直接その値を参照したいのですが、どうすれば良いでしょうか? 私の考えられる範囲で以下のようにプログラムしましたが、 実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。 MOVE I TO C(IDX1) MOVE J TO D(IDX1) MOVE K TO E(IDX1) MOVE L TO F(IDX1) MOVE M TO G(IDX1) MOVE N TO H(IDX1) どなたかよろしくお願いします。

  • COBOLのCALL文がいまいちつかめません。

    いつもお世話になっています。 WINDOWSでCOBOL85を使いながら、COBOLの勉強をしています。 JAVAを基本情報試験のために勉強したくらいの初心者です。 シーケンシャルファイルでマッチング処理を行う、 小さなプログラムを課題としている途中、 CALL文を使ってサブプログラムを作ってみてくださいと言われました。 そこで質問なのですが、 メインプログラムの集団項目をUSING指定で引数として、 サブプログラムで受け取り、処理をするまではいいのですが、 戻り値をどのようにして受け取ればいいのかが イメージがつかめません。 ・戻り値を受け取るための命令 ・戻り値は1つだと思うのですが、どの変数?に返ってくるのか (集団項目ごと返ってくる?) など、何かあればご助言をいただけないでしょうか? ソースは次の通りです。 よろしくお願いいたします。 ■メイン IDENTIFICATION DIVISION. PROGRAM-ID. MACHING_TEST. (省略) WORKING-STORAGE SECTION.   01 JUDGE_F.    03 KEY_F     PIC 9(01).    03 CHANGE_F     PIC X(06).    03 EXCEP_M     PIC 9(01). (省略) CALL "JUDGE_FEMALE" USING JUDGE_F ON EXCEPTION   DISPLAY N"エラーです。プログラムを終了します"   STOP RUN   NOT ON EXCEPTION    IF EXCEP_M = 9 THEN MOVE "ERRER!" TO FEMALE_OUT ELSE  IF EXCEP_M = 1 THEN MOVE CHANGE_F TO  FEMALE_OUT  END-IF    END-IF    END-CALL. (以下略) ■サブ IDENTIFICATION DIVISION. PROGRAM-ID. JUDGE_FEMALE. DATA DIVISION. LINKAGE SECTION. 01 JUDGE_F.  03 KEY_F PIC 9(01).  03 CHANGE_F PIC X(06).  03 EXCEP_M PIC 9(01). PROCEDURE DIVISION USING JUDGE_F. IF KEY_F = 1  THEN   MOVE "オトコ" TO CHANGE_F   MOVE 1 TO EXCEP_M  ELSE   IF KEY_F = 2 THEN  MOVE "オンナ" TO CHANGE_F  MOVE 1 TO EXCEP_M ELSE  MOVE 9 TO EXCEP_M END-IF END-IF. PROGRAM-END.  STOP RUN.

  • エクセルで項目名をコピーする方法

    項目名  フラグA フラグB  判定用A 判定用B 国語   1 数学   1 理科         1 社会         1 英語         1 現在A列に項目名、B列にフラグA、C列にフラグB、D列に判定用A、E列に判定用Bという表があります。 ABC列の項目名~フラグBまでは既に値が入っている状態です。 フラグA、Bには整数値が入っているか、空白の状態です。 この状態でフラグAに値が入っていれば、判定用Aに項目名を。フラグBに値があれば判定用Bに項目名をコピーしたいのですが、自動化できるでしょうか? ちなみに項目数は大体数百個単位であり、フラグAとフラグBの両方に値が入る事はありません。