Почему вы хотите прекратить использование основного файла? Выполнение собственных сравнений для имитации индикаторов уровня, вероятно, потребует гораздо больше усилий, чем внесение изменений в первичный файл.
В общем случае, чтобы заменить первичный файл полноценным процедурным файлом, поставьте READ + DOW, а не %EOF(primaryfile) в начале вычислений, а второй READ и ENDDO поместите в конце вычислений.
Для вычислений с индикаторами уровня L0, L1 и т. д. в столбцах 7 и 8 я бы сначала переместил эти вычисления в подпрограммы, а пока назову их как-то вроде L0_subr, L1_subr и т. д.
Для обработки сравнений с предыдущей записью после первого READ перед DOW добавьте операторы для сохранения текущих значений полей индикатора уровня. В конце вычислений, перед вторым READ, добавьте операторы для сравнения текущих значений с сохраненными значениями, и если они отличаются, вызовите соответствующие Lx_subr(s). После вызова всех Lx_subrs обновите сохраненные значения для этого конкретного индикатора уровня.
Внесение такого рода изменений чревато ошибками. Я бы просто оставил его в качестве основного файла и добавил дополнительные индикаторы уровня в спецификации I, если это необходимо.
Обновление 2017-11-06 начиная отсюда:
Чтобы включить отслеживание как предыдущей, так и текущей записи, используйте функцию чтения в структуру данных.
read rec cur_ds;
dow not %eof;
...
if have_prv_ds;
compare the previous record to the current record
endif;
eval-corr prv_ds = cur_ds;
have_prv_ds = *on;
read rec cur_ds;
enddo;
Поскольку READ не повлияет на автономные поля, связанные с файлом, рекомендуется избегать случайного обращения к этим автономным полям, чтобы даже не определять автономные поля. Для этого определите файл с ключевым словом QUALIFIED. Тогда вы бы ссылались на формат записи, используя file.fmt, и поля, связанные с файлом, не существовали бы.
dcl-f myfile qualified;
dcl-ds cur_ds likerec(myfile.fmt);
dcl-ds prv_ds likerec(myfile.fmt);
read myfile.fmt cur_ds;
dow not %eof(myfile);
...
if have_prv_ds;
compare the previous record to the current record
endif;
eval-corr prv_ds = cur_ds;
have_prv_ds = *on;
read myfile.fmt cur_ds;
enddo;
person
Barbara Morris
schedule
03.11.2017