Ключевое слово COBOL REDEFINES
Могу ли я спросить, каково использование ключевого слова REDEFINES в COBOL?
Я не могу понять ручное определение.
В чем смысл следующего кода?
01 WS_CHARGE_TXT_8X PIC X(08) VALUE "10000000".
01 WS_CHARGE_NUM_8 REDEFINES WS_CHARGE_TXT_8X.
05 WS_CHARGE_8 PIC 9(05)V9(03).
Спасибо!
Ответы
Ответ 1
В основном Redefines повторно использует пробелы, поэтому в приведенном выше примере WS_CHARGE_TXT_8X
и WS_CHARGE_8
будут указывать на один и тот же блок памяти. Это позволяет взглянуть на блок памяти по-разному, в этом случае переменную можно рассматривать как текст PIC X и числовой PIC S9 со знаком. -8X - -8 в имени переменной просто стилистически указывают на то, что переменная передается другому типу или формату другим программистам.
В приведенном выше примере
- значение WS_CHARGE_TXT_8X равно "10000000"
- значение WS_CHARGE_8 составляет 10000.000.
Если вы переместили 123.456 в WS_CHARGE_8
значение WS_CHARGE_TXT_8X
"00123456".
Более полезный пример
03 Birth-Date-YYYYMMDD pic 9(8).
03 filler redefines Birth-Date-YYYYMMDD.
05 Birth-Date-YYYY pic 9(4).
05 Birth-Date-MM pic 99.
05 Birth-Date-DD pic 99.
В этом случае вы можете получить доступ ко всей дате рождения-ГГГГММДД или году/месяцу/дню отдельно (Дата рождения-ГГГГ и т.д.).
Ответ 2
Это аналогично объединению в 'C'.
Он экономит рабочее пространство хранения и операторы MOVE, а также полезен для переноса массивов PIC (X) или доступа к повторяющимся полям в виде массива.
В случае OP создается числовой тип для содержимого char поля прототипа.
Ответ 3
A REDEFINES позволяет другое описание данных для хранения, которое уже определено.
Это может означать, что там могут храниться совсем другие данные.
05 RL-AGENT-DATA.
...
05 RL-CUSTOMER-DATA REDEFINES RL-AGENT-DATA.
...
Или дать описание, которое позволяет использовать часть данных, как в примере Брюса.
Или использовать кусок данных, который является одним и тем же, но для другой цели:
05 INPUT-AMOUNT PIC X(10).
05 INPUT-AMOUNT-NUMERIC REDEFINES PIC 9(8)V99.
Все, что находится в INPUT-AMOUNT, можно сообщить без проблем, но только если оно является допустимым числовым (посредством testng его для NUMERIC), используется INPUT-AMOUNT-NUMERIC для какой-либо цели.
Обратите внимание, что каждый 01, следующий за первым под FD, является "неявным REDEFINES".
Обратите внимание, что элементы в LINKAGE SECTION имеют эффект "переопределения" "чего-то", хотя, если адрес данных из программы CALLing, определение часто совпадает с определением оригинала и обычно по крайней мере, соответствуют PICtures оригинала.