COBOLプログラミング時の注意点(バグ・レポート)
** よくありがちなミスを載せてみました。(参考になるかな?)
1.PERFORM命令
1.1 添え字桁数不足によるループ (1999.06.12記)
03 IX-1 PIC 9(02) VALUE 0.
PERFORM WITH TEST BEFORE VARYING IX-1 FROM 1 BY 1
UNTIL IX-1 > 100 .
.
END-PERFORM.
IX-1 : 1, 2, . . . 99, 0 となり UNTIL条件が成立しないのでループしてしまう。
◆ メンテナンス等で繰り返し項目の修正を行うときは、注意しましょう。
1.2 繰り返しを抜けるための、添え字最大値セットによるループ (1999.06.12記)
03 IX-1 PIC 9(02) VALUE 0.
PERFORM WITH TEST BEFORE VARYING IX-1 FROM 1 BY 1
UNTIL IX-1 > 50
IF TBL-ITEM1(IX-1) = IN-ITEM1
THEN
MOVE ・ ・ ・ ・
MOVE 99 TO IX-1
END-IF
END-PERFORM.
IX-1 : 条件成立で99になりさらに PERFORM VARYING で +1 されて(0になってしまう)から
UNTIL条件のチェックとなり UNTIL条件が成立しないのでループしてしまう。
MOVE 98 TO IX-1 ならば OK!
◆ 机上レビューをしっかりやりましょう。
2 添え字設定漏れ(0値)の動き (1996.06.12記)
実行時の繰り返し項目に対する添え字が上限値・下限値(値:1)をオーバーすると
エラーとなるのが通常ですが、オンラインプログラムなどはこのチェック機能を外す事が
有るようです(処理スピードアップのため)、
この時(添え字値=0)は、繰り返し項目の−1番目を対象にして動くようです。
03 ITEM-A PIC X(03).
03 ITEM-B PIC 9(03) COMP-3.<----------+
03 ITEM-C PIC X(01). |
03 ITEM-D PIC X(01). |
03 ITEM-E PIC X(01). |
03 TBL OXXURS nn TIMES. |
05 T-ITEM1 PIC X(03). |
05 T-ITEM2 PIC 9(03) COMP-3. <-------+
05 T-ITEM3 PIC X(03).
03
普通ならば、別エリアなので項目属性の違いにより「0C7」などでABENDするでしょうが、
偶然一致して動作してしまうこともありますので注意しましょう。
◆ 机上レビューをしっかりやりましょう。
3.STRING命令 (1996.06.12記)
INTOで指定した項目は、文字が転送された部分以外は実行前のままです。
◆ エリアの初期化を忘れずにしましょう。