Кто-нибудь может подсказать мне, как я могу решить эту проблему или что я делаю не так?
Не используйте 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.