Есть ли способ использовать REXX для редактирования набора данных PS и вставки строки после определенной строки?

Я пишу программу REXX, которая обновит набор данных PS. Я могу редактировать определенную строку, используя мой код REXX. Но я бы хотел, чтобы код вставлял определенную строку после определенной строки.
Например: мой набор данных PS имеет 100 строк. Я хочу вставить текст "ABCDE" после 44-й строки (в 45-й строке), что увеличит общее количество строк файла до 101 строки. Остальные строки должны остаться без изменений. Возможно ли это с помощью REXX?

2 ответа

Решение

Независим от REXX вам нужно эффективно прочитать старый набор данных и записать его в новый файл, добавить новую запись (строку) в выходной файл и затем записать остальные. Невозможно "вставить" запись в физический последовательный набор данных (PS). В конце вы удалили старый и переименовали вновь созданный файл в старое имя.

Другой вариант - использовать группу наборов данных поколения (GDG) и прочитать текущую (0) и создать новый (+1) в качестве выхода. Таким образом, вы все еще ссылаетесь на одно и то же имя набора данных, на которое могут ссылаться другие.

То, что предлагает @Hogstrom, является хорошим решением проблемы, которую вы описываете. В интересах полноты, вот решение, которое может быть необходимо в экстремальных обстоятельствах.

Создать макрос редактирования...

/*REXX*/
ADDRESS ISREDIT 'MACRO NOPROCESS'
aLine = 'ABCDE'
ADDRESS ISREDIT 'LINE_AFTER 44 = DATALINE (ALINE)'

... и запустите ISPF edit в пакетном режиме, выполнив этот макрос.

JCL для запуска ISPF в пакетном режиме зависит от магазина, но многие магазины создали каталогизированную процедуру для этого.

Если вы хотите скопировать свой набор данных в файловую систему z/Unix, вы также можете использовать sed или awk для внесения изменений.

Я не рекомендую ничего из этого, я просто указываю, что это можно сделать, если решение @ Hogstrom по какой-то причине не будет работать для вас.

Другие вопросы по тегам