Инициализируйте переменную длину в Cobol - PullRequest
0 голосов
/ 25 мая 2018

У меня есть тетрадь со следующим:

(...)
05 ESTGWABC-S-OUT.
   10 ESTGWABC-S-COD-NUM        PIC 9(003).
   10 ESTGWABC-S-DESC-COD       PIC X(020).
   (...)
   10 ESTGWABC-S-VAL-PAY        PIC 9(015)V99.
   10 ESTGWABC-S-QTD-REG        PIC 9(002).
   10 ESTGWABC-S-REG-PEOP    OCCURS 0 TO 20 TIMES
                 DEPENDING ON ESTGWABC-S-QTD-REG.
      15 ESTGWABC-S-CCONTR      PIC 9(009).
      15 ESTGWABC-S-VAL-PAY     PIC 9(015)V99.
   10 ESTGWABC-S-DEPEN          PIC 9(005).
   (...)

В моей программе я хочу инициализировать ее перед использованием, поэтому я делаю следующее:

INITIALIZE                  ESTGWABC-S-OUT
                            REPLACING ALPHANUMERIC BY SPACES
                                           NUMERIC BY ZEROS

Но я получаю ошибку компиляции:

"ESTGWABC-S-OUT" was found in an "INITIALIZE" statement but was variable-length or variably located. The operand was discarded from the "INITIALIZE" statement.

Кто-нибудь может подсказать, как я могу решить эту проблему или что я делаю неправильно?Большое спасибо.

1 Ответ

0 голосов
/ 25 мая 2018

Кто-нибудь может подсказать мне, как я могу решить эту проблему или что я делаю не так?

Не используйте INITIALIZE, и вы ничего не делаете неправильно.

В основном, стандарт COBOL устанавливает правила организации записей данных.Затем он определяет поведение оператора INITIALIZE для правильной работы с этими записями данных.

Элементы данных после таблицы переменной длины «расположены по-разному».Это не соответствует стандартному COBOL, который требует, чтобы любой элемент данных переменной длины, в данном случае, ESTGWABC-S-REG-PEOP, был последним в record description entry.Расположение ESTGWABC-S-DEPEN будет меняться в зависимости от количества записей в таблице, ESTGWABC-S-REG-PEOP.При изменении размера таблицы ESTGWABC-S-DEPEN больше не будет инициализированным элементом данных.

Чтобы разрешить использование INITIALIZE, необходимо изменить «тетрадь».


Ниже приведен пример использования INITIALIZE со стандартной записью переменной длины.Это было сделано с помощью компилятора Micro Focus с флагами для обеспечения соответствия COBOL 85.

  $set ans85 flag"ans85" flagas"s"
   identification division.
   program-id. var-len.
   data division.
   working-storage section.
   01  n pic 9(2).

   01  a.
    02  fixed-part.
     03  b pic x(2).
     03  c pic 9(2).
    02  variable-part.
     03  d occurs 0 to 10 depending c.
      04  e pic x(2).
      04  f pic 9(2).

   procedure division.
   begin.
       initialize fixed-part
       perform varying n from 1 by 1 until n > 10
           initialize d (n)
       end-perform
       stop run
       .
   end program var-len.
...