Правильный способ сброса счетчика в COBOL - PullRequest
3 голосов
/ 01 февраля 2012

Я хочу знать, как лучше сбросить счетчик.У меня есть следующее:

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

Когда WS-SEQ-NO равен 9999, и я увеличиваю его, или если я перемещаю 10000 в него, он будет усечен и станет 0000. Это на самом деле желаемыйрезультат, так как я хочу, чтобы он перешел к 0000 после 9999. Тем не менее, мне интересно знать, приемлемо ли это по стандартам программирования на языке COBOL?Или я должен использовать условие IF, чтобы сбросить его.Например:

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

Кроме того, этот код будет выполняться только раз в месяц или около того, и он не находится в цикле, поэтому я не отчаянно нуждаюсь в том, чтобы избежать появления дополнительного условия IF.Мне просто интересно, можно ли, так сказать, «законно» в смысле стандартов программирования полагаться на эту функцию COBOL, которая усекает число, а не кодирует его.Спасибо!

Ответы [ 5 ]

4 голосов
/ 01 февраля 2012

Я предпочитаю видеть "Переместить 0 в WS-SEQ-NO".Использование опрокидывания может не работать должным образом на всех платформах, и это просто не так ясно.

Помните, что вы пишете исходный код для людей, которые идут за вами.Они должны посмотреть на это и ясно увидеть «о, сбросить счетчик».

3 голосов
/ 01 февраля 2012

Я считаю, что метод MOVE 0 TO WS-SEQ-NO более понятен в отношении ваших намерений.

Что-то, что следует иметь в виду, могут быть параметры компиляции, которые влияют на наблюдаемое вами поведение усечения / опрокидывания.Например, в IBM Enterprise COBOL , если WS-SEQ-NO определен как PIC 9 (4) COMP, тогда опция компиляции TRUNC (BIN) вызовет усечение / опрокидывание на 65535в то время как TRUNC (STD) будет демонстрировать поведение, которое вы сейчас видите.

2 голосов
/ 01 февраля 2012

Я бы сохранил условие и определил счетчик таким образом

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.

2 голосов
/ 01 февраля 2012

Я знаю COBOL с нуля, но меня беспокоит то, что тип данных, используемый для WS-SEQ-NO, может отличаться при другой реализации COBOL и может изменить размер, так что автоматический перенос не будет работать , Что еще более важно, утверждение if четко дает понять, что это именно то, что вы намереваетесь, а не просто случайный побочный эффект.

0 голосов
/ 09 февраля 2012

Если это работает, это работает. Однако добавьте комментарии к своей программе в рабочем хранилище и в цикле программы, чтобы сказать, что вы ожидаете, что произойдет опрокидывание, и это желаемый результат. Мы, смертные, не узнаем об этом в следующем году, когда мы будем обслуживать вашу программу, и мы выследим вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...