2

カウンターをリセットするより良い方法を知りたいです。私は次のものを持っています:

03 WS-SEQ-NO    PIC  9(04).

WS-SEQ-NO が 9999 の場合、それをインクリメントするか、10000 を移動すると、切り捨てられて 0000 になります。9999 の後に 0000 にティックオーバーしたいので、これは実際には望ましい結果です。ただし、 、これが COBOL プログラミング標準で受け入れられるかどうか知りたいですか? または、IF条件を使用してリセットする必要があります。例えば:

IF WS-SEQ-NO = 9999
    MOVE 0 TO WS-SEQ-NO
ELSE
    ADD 1 TO WS-SEQ-NO
END-IF.

また、このコードは 1 か月に 1 回程度しか実行されず、ループしていないため、追加の IF 条件を回避する必要はありません。いわば、プログラミング標準の意味で、数字をコーディングするのではなく、数字を切り捨てるこのCOBOL機能に依存することが「合法」であるかどうか疑問に思っているだけです。ありがとう!

4

5 に答える 5

4

私は「0 を WS-SEQ-NO に移動」を見ることを好みます。ロールオーバーに依存することは、すべてのプラットフォームで期待どおりに機能しない可能性があり、単純に明確ではありません。

あなたの後に続く人間のためにソースコードを書くことを忘れないでください。彼らはそれを見て、「ああ、カウンターをリセットしてください」とはっきりとわかるはずです。

于 2012-02-01T01:05:59.340 に答える
3

MOVE 0 TO WS-SEQ-NOあなたの意図に関しては、この方法がより明確であると思います。

心に留めておくべきことは、観察する切り捨て/ロールオーバーの動作に影響を与えるコンパイルオプションがあるかもしれないということです。たとえば、IBM の Enterprise COBOLでは、WS-SEQ-NO が PIC 9(4) COMP として定義されている場合、コンパイル オプションTRUNC(BIN)は 65535 で切り捨て/ロールオーバーを引き起こしますが、TRUNC(STD) は、現在見ています。

于 2012-02-01T03:15:31.267 に答える
2

私は COBOL をゼロから知っていますが、私の懸念は、WS-SEQ-NO に使用されるデータ型が COBOL の別の実装では異なる可能性があり、サイズが変更されて自動ロールオーバーが機能しなくなる可能性があることです。さらに重要なことに、if ステートメントは、これが意図したものであり、単なる偶発的な副作用ではないことを完全に明確にします。

于 2012-02-01T00:28:25.753 に答える
2

条件を維持し、この方法でカウンターを定義します

01 COUNTERS.
   03 WS-SEQ-NO    PIC  9(04).
      88 MAX-SEQ-NO VALUE 9999.
...
IF MAX-SEQ-NO
    MOVE 0 TO WS-SEQ-NO
ELSE
    ADD 1 TO WS-SEQ-NO
END-IF.

カウンターを に変更する必要がある場合PIC 9(5)は、条件を変更する必要がないため、忘れることはありません。

レベル 88 を変更するだけです。

于 2012-02-01T14:24:22.590 に答える
0

それが機能する場合、それは機能します。ただし、作業用ストレージとプログラムのループにコメントを追加して、ロールオーバーが発生することを期待しており、それが望ましい結果であることを示します。私たちの定命の者は、来年私たちがあなたのプログラムのメンテナンスをしているときにそれを知りません、そして私たちはあなたを追い詰めます。

于 2012-02-08T22:10:46.387 に答える