Как определить числовое значение из файла vsam для упакованного предложения PIC cobol без написания программы на cobol?

Я использовал пакет утилит (vsmr), чтобы прочитать значения файла VSAM, и у меня есть доступный исходный код тетради.

Если у меня есть определения, подобные ниже (прошу прощения за форматирование)

01 RECORD
   05 RECORD-X PIC S9(3)V99 COMP-3
   05 RECORD-Y PIC S9(3)V99 COMP-3
   05 RECORD-Z PIC S9(3) COMP-3
   05 RECORD-ALPHA PIC X(10)

и у меня есть следующее в данных

00 20 0C 01 10 0C 01 00 0C

Как определить числовое значение для RECORD-X?

Я предполагаю, что RECORD-X занимает 3 байта, а значения 00 20 0C соответствуют значению RECORD-X, но я не знаю, как преобразовать его в удобочитаемое значение (алгоритмически, не обязательно программно).

Я также предположил бы, что значения 01 10 0C соответствуют значению для RECORD-Y. Верны ли мои предположения?

1 ответ

Решение

COMP-3 является реализацией двоичного кода (BCD). Каждый кусочек байта соответствует цифре, а последний кусочек содержит знак. Где у вас есть...

00 20 0C 01 10 0C 01 00 0C

... мы можем сопоставить первые три байта RECORD-X и имеют значение +002,00. Куски знака со значением C, A, F или E арифметически считаются положительными; знак клев со значением B или D арифметически считается отрицательным. Десятичная точка не кодируется в данных, вы должны иметь определение поля, чтобы знать, где оно находится.

IBM Enterprise COBOL имеет понятие "предпочтительный знак", который означает C для положительного и D для отрицательного. Существуют оптимизации, которыми вы можете воспользоваться, если уверены, что все ваши данные являются "предпочтительным признаком".

Ваше предположение о RECORD-Y правильно, его значение +11,00.

Если вы пишете на языке COBOL, вам не нужно реализовывать алгоритм для преобразования его в удобочитаемое значение, просто MOVE RECORD-X TO RECORD-X-DISPLAY где RECORD-X-DISPLAY определяется с PIC +999.99,

Другие вопросы по тегам