プロが教える店舗&オフィスのセキュリティ対策術

新人研修でAS/400のRPG3を習ってます。
現在、AMFILEとCMFILEと言うファイルをAMCUSTと言うKEYで繋ぎ、WPO001と言うファイルにアウトプットする演習問題に取り組んでいるのですが、LOOPが止まらなく、WPO001がオーバーフローしてしまいます。何方か、もしよろしければ助けてください。わたしが書いたMAIN ROUTINE のプログラムは以下です。

C READ AMFILE 70*
C *IN,70 DOWEQ*ZERO *
C AMCUST CHAINCMFILE 60 *
C N60 GOTO FND *
C FND TAG *
C WRITEWPO001R *
C ENDDO *
C SETON LR *

A 回答 (2件)

RPGはしばらくぶりなので自信はないのですが一応。



FNDのTAGの位置がおかしいので、
このプログラムだと、おそらく、
CMFILEがVALIDであろうとINVALIDであろうと
WPO0001Rに出力をしてしまいます。
それがエラーの原因ではないでしょうか?

オーバーフローというエラーだからといって、
本当にオーバーフローだとは限らないことがあります。

デバッグモードで動きを確認してみてはいかがでしょうか?
    • good
    • 0

質問のあった日にちを考えるともう解決したかもしれませんが


回答してみます。

質問内容とソースを見る限りでの推測ですが、AMFILEから読み込んだキーが
CMFILEにも存在するときにWPO001Rに書き込むという流れで良いのでしょうか?
その前提で話を致します。

sugiyameさんの回答にもあった通り、VALIDであろうとINVALIDであろうと
WPO0001Rに出力をしてしまいます。
それと、DO文から抜ける条件がその中に無い為、抜けることができず
永遠に同じ内容を書き込む結果になっていると思います。(INVALIDの時
何が書き込まれるかは分からないですが....)
これがオーバーフローの原因ではと思われます。

対応としてはまず、
1.INVALIDの場合はWRITEを行わない
2.DO文から抜ける条件をその中にいれる。
修正をしてみては如何でしょうか?

大きなお世話かもしれませんが修正例を書いておきます。

C READ AMFILE 70 *
C *IN70 DOWEQ*ZERO *
C AMCUST CHAINCMFILE 60 *
C N60 WRITEWPO001R *
C READ AMFILE 70 *
C ENDDO *
C SETON LR *
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!