Отображение нулей в COBOL
Я новичок в COBOL, и наша последняя учебная деятельность заключается в том, что мы постараемся получить выходные данные из трех пунктов, например:
- 0000/2013
- 00012345
- 12345 **
Я попытался с моим кодом ниже, но он явно не дает мне вывод, который я хочу. Он не отображает нули.
IDENTIFICATION DIVISION.
PROGRAM-ID. ACTIVITY4.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC z(4)9(4) VALUE 2013.
01 NUM2 PIC Z(3)9(5) VALUE 12345.
01 NUM3 PIC 9(5) VALUE 12345.
01 E-NUM1 PIC *(2)9 VALUE 0.
PROCEDURE DIVISION.
DISPLAY-VALUES.
DISPLAY-ZEROES.
MOVE E-NUM1 TO NUM3.
DISPLAY "1) "NUM1.
DISPLAY "2) "NUM2.
DISPLAY "3) "NUM3.
STOP RUN.
3 ответа
Мне кажется, что задание 4 посвящено форматированию данных для вывода. Вам необходимо произвести:
0000/2013
00012345
12345**
Первый требует вставки косой черты. COBOL имеет символ вставки косой черты, '/'. Второе - не допускать подавления нуля, что является поведением, когда выводится поле PIC 9(n), поэтому на самом деле ничего не нужно делать, кроме как правильно задать длину. Третий, по-видимому, привлекает вас к полю редактирования замены "*", что, как я полагаю, является целью вопроса, но символ редактирования * заменяет только начальные нули.
Один простой способ получить конечные звездочки - использовать определение данных. Определите элемент группы, который вы будете отображать. Подчинитесь этому, определите свой номер (PIC 9(5)) и сразу же следуйте за ним с ЗАПОЛНИТЕЛЕМ (названным полем, если хотите) PIC XX, который имеет ЗНАЧЕНИЕ "**"
(или ВСЕ "*"
, немного экстрим для двухбайтового поля, хотя).
IDENTIFICATION DIVISION.
PROGRAM-ID. ACTIVITY4.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(4)/9(4).
01 NUM2 PIC 9(8).
01 NUM3-OUT.
05 NUM3 PIC 9(5).
05 FILLER PIC XX VALUE "**".
ПРОЦЕДУРА ОТДЕЛА.
DISPLAY-VALUES.
DISPLAY-ZEROES.
MOVE 1234 TO NUM1
DISPLAY "1) "
">"
NUM1
"<"
MOVE 12345 TO NUM2
DISPLAY "2) "
">"
NUM2
"<"
MOVE 12345 TO NUM3
DISPLAY "3) "
">"
NUM3-OUT
"<"
STOP RUN
.
Я никогда не ставил VALUE на редактируемое поле. Редактирование выполняется, когда поле является целью глагола COBOL. В COBOL, которые я использую, это не повлияет на редактирование, оно просто будет иметь это буквальное значение. Я не знаю о GNU OpenCOBOL (ранее OpenCOBOL).
Учитывая 12345**
проблема: если ничего не работает, вы можете объединить число со звездочками с помощью STRING
как это:
WORKING-STORAGE SECTION.
01 NUM3 PIC X(7).
01 NUM3-NUMBERS PIC 9(5) VALUE 12345.
PROCEDURE DIVISION.
STRING NUM3-NUMBERS "**" DELIMITED BY SIZE INTO NUM3.
DISPLAY "3) "NUM3.
Этот код добавляет 2 звездочки в конце вашего номера. (но ваш NUM3 теперь является буквенно-цифровым изображением, а не числовым).
Еще одна вещь, которую я только что нашел в старой книге о коболах, это *
Проверьте защитный символ. Я никогда не пробовал, но здесь говорится, что это должно быть использовано следующим образом:
01 NUM3 PIC 9(5)*(2).
Попробуйте!
Опустите Z при объявлении чисел.
Z подавляет ведущие нули в числе в COBOL.
Просто изменив объявления переменных на:
01 NUM1 PIC 9(8) VALUE 00002013.
01 NUM2 PIC 9(8) VALUE 00012345.
(Вам на самом деле не нужны предыдущие нули в числе, они просто там, чтобы показать вам весь PIC.)
Пожалуйста, ознакомьтесь с этим для более подробного описания операторов изображений и краткого описания различных модификаторов символов и того, что они делают.
Сначала я не уловил другую проблему, однако другая переменная, которую вы создали, должна быть
01 E-NUM1 PIC 9(2) VALUE 0.