多线更换

时间:2011-11-05 12:49:23

标签: jcl

我正在尝试在多个JCL中执行搜索替换,但我需要多行功能,我需要替换几行。 例如:

//STEP1 EXEC PGM=DUMY,PARAM=XPTO

转换为

//STEP1 EXEC PGM=WORKS,PARAM=THAT
//SOMEDD DSN=DSN.WITH.SOMETHING
//SYSTIN
SOME MORE PARAMETERS

我研究了文件助手批处理,但它似乎只支持STRING替换而没有多行支持。 我REXX可能会这样做,但我不知道它。

有什么想法吗?

3 个答案:

答案 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)

以下是我的想法:

  1. 您可以编写一个简单的COBOL程序,该程序将搜索所需的STRING并替换为您想要/需要添加的任何内容。
  2. 您还可以编写REXX EXEC来执行此操作,这可能不需要解析读取的代码行。我猜想,简单的IF条件就可以了。
  3. 但是这里有一些挑战,当然可以避免。

    1. 如果您搜索的内容与其他参数一起存在怎么办?喜欢

      // STEP1 EXEC PGM = DUMY,PARAM = XPTO,PARM1 ='X'

    2. 如果搜索字符串跨越多行,该怎么办?喜欢

      // 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)