Принятие подписанных значений как части записи

У меня есть довольно простая программа на Коболе, которую я использую для изучения структур записей. Я заметил странное поведение gnucobol при передаче числовых значений со знаком как части записи в операторе ACCEPT.

Программа определяется следующим образом:

IDENTIFICATION DIVISION.
PROGRAM-ID. TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Account.
  02 Name PIC X(5) VALUE SPACES.
  02 Balance PIC S9999V999 VALUE ZEROES.
PROCEDURE DIVISION.
MAIN.
  DISPLAY "Enter account details:"
  ACCEPT Account.
  DISPLAY "Balance is:"
  DISPLAY Balance.

  STOP RUN.

Поведение выглядит следующим образом:

Enter account details:
AAAAA-123.456
Balance is:
+-123.045

Я предполагаю, что это связано с тем, как значение хранится в необработанной памяти.

Это обычно то, что делает большинство компиляторов кобола? Есть ли способ заставить кобол правильно интерпретировать подписанное значение?


person lyptt    schedule 17.04.2020    source источник


Ответы (1)


Я предполагаю, что это связано с тем, как значение хранится в необработанной памяти.

да

Это обычно то, что делает большинство компиляторов кобола?

предположение: да (фактическое отображение будет другим, но я уверен, что большинство сред COBOL не будут делать то, что вы, кажется, хотите, по крайней мере, таким образом)

Есть ли способ заставить кобол правильно интерпретировать подписанное значение?

Да, но есть вещи, которые можно сделать с помощью COBOL:

  • храните данные во внутреннем формате (как и вы: значение со знаком с подразумеваемыми 3 десятичными позициями), но для ACCEPT и, вероятно, также DISPLAY используйте формат, который на самом деле имеет данные, как вы хотите, например, PIC +ZZZ9.999$, для некоторых деталей см. этот ответ
  • никогда ACCEPT запись, либо разделите ее на несколько ACCEPT, либо используйте одну, принимая экранное имя, а не имя записи --> используйте SCREEN SECTION для ввода данных, это даст вам два отдельные поля и с разумной проверкой ввода в большинстве сред COBOL.
person Simon Sobisch    schedule 17.04.2020
comment
Имеет смысл, спасибо. Я видел учебные пособия, демонстрирующие, как работают записи путем ACCEPTобработки данных полной записи, что мне показалось немного схематичным. Приятно знать, что это делается не так, как обычно. - person lyptt; 18.04.2020