Кобол ключевое слово УТОЧНЯЕТ - PullRequest
17 голосов
/ 11 марта 2011

Могу я спросить, как используется ключевое слово 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).  

Спасибо!

Ответы [ 3 ]

19 голосов
/ 11 марта 2011

В основном, переопределение повторно использует пробелы, поэтому в приведенном выше примере 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.

В этом случае вы можете получить доступ к вся дата Дата рождения-ГГГГММДД или год / месяц / день индивидуально ( Дата рождения-ГГГГ и т. д.).

3 голосов
/ 11 марта 2015

Это аналог объединения в 'C'.Это экономит рабочее пространство хранения и операторы MOVE, а также полезно для транспонирования массивов PIC (X) или доступа к повторяющимся полям в виде массива.В случае OP создается числовой «тип» для содержимого char поля прототипа.

1 голос
/ 28 января 2013

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, об этом можно сообщить без проблем, но только если оно является действительным числовым значением (путем проверки его на NUMERIC), INPUT-AMOUNT-NUMERIC используется для некоторых целей.

Обратите внимание, что каждый 01после первого под FD стоит «неявное ПЕРЕОПРЕДЕЛЕНИЕ».

Обратите внимание также, что элементы в РАЗДЕЛЕ СВЯЗИ имеют эффект «переопределения» «чего-то», даже если адрес данных взят изВызывающая программа, определение часто совпадает с исходным определением, и обычно должно по крайней мере соответствовать PICtures оригинала.

...