我正在尝试在多个JCL中执行搜索替换,但我需要多行功能,我需要替换几行。 例如:
//STEP1 EXEC PGM=DUMY,PARAM=XPTO
转换为
//STEP1 EXEC PGM=WORKS,PARAM=THAT
//SOMEDD DSN=DSN.WITH.SOMETHING
//SYSTIN
SOME MORE PARAMETERS
我研究了文件助手批处理,但它似乎只支持STRING替换而没有多行支持。 我REXX可能会这样做,但我不知道它。
有什么想法吗?
答案 0 :(得分:1)
有些商业产品可以理解JCL语法,可以做这种事情。 JOB/SCAN是一个,我相信此产品领域的其他人也可以做到这一点。
如果您没有这样的产品,这没有任何帮助,所以我们回到您的Rexx评论。是的,您可以使用Rexx执行此操作,但您将要解析JCL。根据您的要求,这可能非常重要。 Rexx没有正则表达式匹配,这是解析时通常使用的。它可以做到,如果你不想做任何更复杂的事情,你所表明的那样对于Rexx程序员来说可能并不太难 - 也许这是一个成为一个机会的机会。 Rexx作为其design goals之一,使编程更容易。
另一种方法是使用Perl,将PDS成员复制到Unix文件系统,以便处理它们,然后在完成后将其复制回来。假设您正在运行relatively current release z / OS,并且您的系统程序员已经安装了z/OS port of Perl,这是一个免费项目。
如果您愿意将受影响的成员复制到Unix文件系统,可能能够使用awk执行此操作。我只涉及awk,但它的优势在于默认情况下只是在那里,没有人必须安装任何默认情况下尚未安装的东西(Perl)。
答案 1 :(得分:1)
以下是我的想法:
但是这里有一些挑战,当然可以避免。
如果您搜索的内容与其他参数一起存在怎么办?喜欢
// STEP1 EXEC PGM = DUMY,PARAM = XPTO,PARM1 ='X'
如果搜索字符串跨越多行,该怎么办?喜欢
// STEP1 EXEC PGM = DUMY,
// PARAM = XPTO
答案 2 :(得分:1)
这是一个简单的TSO / ISPF编辑宏,它将实现您的示例。当然,这非常粗糙,但作为如何编辑JCL的一个例子。
ISREDIT MACRO ()
CONTROL NOFLUSH NOPROMPT LIST CONLIST SYMLIST MSG
ISREDIT CHANGE ' PGM=DUMY' ' PGM=WORKS'
ISREDIT CHANGE 'XPTO' 'THAT'
ISREDIT (ROW1,COL1) = CURSOR
ISREDIT LINE_AFTER &ROW1 = "//SOMEDD DD DSN=DSN.WITH.SOMTHING,DISP=SHR"
SET &ROW1 = &ROW1 + 1
ISREDIT LINE_AFTER &ROW1 = "//SYSTSIN DD *"
SET &ROW1 = &ROW1 + 1
ISREDIT LINE_AFTER &ROW1 = "SOME MORE PARAMETERS"
EXIT CODE(0)