Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

[掲示板に戻る]


Re:(再投稿)構造化プログラミングの方... EXCHANGE 2004-8-20 11:39
もう少しだけ直しました。 EXCHANGE 2004-8-20 13:09
Re:もう少しだけ直しました(その2) EXCHANGE 2004-8-21 12:20
Re:もう少しだけ直しました(その2) 江須扇 2004-8-22 12:53
Re:もう少しだけ直しました(その2) EXCHANGE 2004-8-22 13:50
Re:もう少しだけ直しました(その2) 江須扇 2004-8-24 15:34

5 Re:(再投稿)構造化プログラミングの方法
EXCHANGE 2004-8-20 11:39  [返信] [編集]

WHEN 0 の時の取り扱いがまずいので、訂正です。
まだまだヘンかも。。。
適当に直して下さい。


*
PERFORM UNTIL END-STATUS = "P9"
           OR FOCUS-POSITON > FOCUS-POSITION-MAX
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-A-DSP
                ADD 1 TO FOCUS-POSITON
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-B-DSP
                ADD 1 TO FOCUS-POSITON
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
END-PERFORM.
6 もう少しだけ直しました。
EXCHANGE 2004-8-20 13:09  [返信] [編集]

もう少しだけ直しました。
 いかがでしょうか?


MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-A-DSP
                PERFORM ACEP-A-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-A
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-B-DSP
                PERFORM ACEP-B-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-B
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
  IF FOCUS-POSITION > FOCUS-POSITION-MAX
    THEN MOVE "EXIT" TO WINDOW-STATUS
  END-IF
*
END-PERFORM.
7 Re:もう少しだけ直しました(その2)
EXCHANGE 2004-8-21 12:20  [返信] [編集]

もう少しだけ直しました。(その2)
 いかがでしょうか??


*
MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-A-DSP
                PERFORM ACEP-A-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-A
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-B-DSP
                PERFORM ACEP-B-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-B
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
  IF FOCUS-POSITION > FOCUS-POSITION-MAX
    THEN MOVE "EXIT" TO WINDOW-STATUS
  END-IF
*
END-PERFORM.

8 Re:もう少しだけ直しました(その2)
江須扇 2004-8-22 12:53  [返信] [編集]

EXCHAGEさん早速いろいろと回答を頂きありがとうございます。
いろいろと考えていただきありがとうございます。

結論としてはやはり自分で何らかのスイッチを定義する必要があると言う事ですか。
A−VXのCOBOLの機能で使えるものは無いということですね。

もう一度、やりたい事を説明しますと


項目A入力
↓__↑(BTABを押すと項目Aに戻る)
項目B入力
↓__↑(項目Bに戻る、入力すると結果表示に行く)
結果表示

という処理です。

EXCHAGEさんの例では結果表示はもう一ランク上で括れということですね。


*
MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"        ←私か追加した部分
             OR WINDOW-STATUS = "EXIT"     ←私か追加した部分
  PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
〜中略〜
(EXCHANGEさんの内容)
*
  END-PERFORM 
結果表示処理                ←私か追加した部分
MOVE 2 TO FOCUS-POSITION.          ←私か追加した部分
END-PERFORM.                 ←私か追加した部分
STOP RUN.                  ←私か追加した部分

9 Re:もう少しだけ直しました(その2)
EXCHANGE 2004-8-22 13:50  [返信] [編集]

☆ 「雛形」ではカーソルの位置の制御を、FOCUS-POSITIONで

  行っていますので、

  例えば項目Bの入力後、項目Bの再入力へLOOPさせたい場合は、 FOCUS-POSITIONを変更せずに進めるとうまくいくのでは

  ないかと思います。(間違ってたらごめんなさい)



  項目入力時に(HTAB)(BSKIP)以外のキーを押下した場合も(F9)をのぞいて同じ項目の再入力に戻ります。

 

☆ なおA−VXの場合、SKIPキーの扱いが問題かとも思います。

 経験された方はご存じと思うのですが、数字項目の表示位置が初期状態では「空白」(=文字)となるので「0」等を編集表示(例:ZZZZ−)しておかないと、いきなりSKIPを押下−−>「NON−NUMERIC」エラーになります。入力後、カンマ付編集をしている場合も(カンマが文字と見なされるので)要注意です。この辺をうまく織り込もうとすると「雛形」を使っても結構、面倒な気がします。





*
MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-A-DSP
                PERFORM ACEP-A-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-A
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-B-DSP
                PERFORM ACEP-B-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-B
                  ELSE
                      (処理結果表示)
                      (FOCUS-POSITONを1UPしない)
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
  IF FOCUS-POSITION > FOCUS-POSITION-MAX
    THEN MOVE "EXIT" TO WINDOW-STATUS
  END-IF
*
END-PERFORM.

10 Re:もう少しだけ直しました(その2)
江須扇 2004-8-24 15:34  [返信] [編集]

EXCHANGEさん、いろいろとありがとうございます。

流れの基本は私と同じと思いましたが大きく違うところが解りました。
私はどうしてもメモリの少ない時の癖でプログラムの解りやすさより、ステップ数重視で1ステップでも少なくなる事を考えてしまいます。
保守性を考えたらわかり易さ重視の方が良いようですね。
多分、私の元のコーディングは
WHEN SWITCH−BTABで1項目の入力
WHEN SWITCH−HTABで2項目の入力
になっており意味不明という事ですね。
そうですステップ数削減で意味不明です。
3項目を作ったどうするか考えておりませんでした。
それにしてもCOBOL側でもっとステップ数のすくなくなる
命令がないのでしょうかね?

BluesBB ©Sting_Band