Ключевое слово 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 оригинала.