Есть ли способ использовать 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 по какой-то причине не будет работать для вас.