2011-11-05 77 views
1

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

//STEP1 EXEC PGM=DUMY,PARAM=XPTO 

变成

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

我看着文件援助批量处理,但它似乎只支持字符串替换没有多线支撑。 我的事情REXX可能会做到这一点,但我不知道它。

任何想法?

+1

REXX是一个很好的工具,可以让你明确地定位需要修补的JCL的各个部分。但是,在这个网站的范围之外提供深入的教程来开发这些技能。但是,如果您继续在IBM大型机环境中工作,我建议您花时间学习和学习如何使用REXX。您可以查看[REXX用户指南](http://publibfp.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/IKJ4C310/CCONTENTS?DT=20010706113306)作为出发地。 – NealB

回答

1

有一些商业产品可以理解JCL语法,并且可以做这种事情。 JOB/SCAN就是其中之一,我相信这个产品领域的其他人也可以做到这一点。

如果你没有这样的产品,那没有什么帮助,所以我们回到你的Rexx评论。是的,你可以用Rexx来做到这一点,但是你将会解析JCL。根据您的要求,这可能不是微不足道的。 Rexx没有正则表达式匹配,这是解析时通常使用的。这是可以做到的,如果你不打算做任何更复杂的事情,那么你对Rexx程序员来说可能不会太难 - 也许这是一个成为一体的机会。作为其中一个design goals,Rexx使编程变得更容易。

另一种方法是使用Perl,将PDS成员复制到Unix文件系统,以便可以处理它们,然后在完成时将其复制回来。假设您运行的是z/OS的relatively current release,并且您的系统程序员已安装z/OS port of Perl,这是一个免费项目。

如果您愿意将受影响的成员复制到Unix文件系统,您可以可能能够与awk做到这一点。我只涉及到awk,但它具有默认存在的优点,没有人需要安装任何默认情况下不存在的任何内容(Perl)。

1

下面是我在我的脑海准备:

  1. 你可以写一个简单的COBOL程序,它会搜索所需的字符串,并将任何你想要/需要补充更换。
  2. 您也可以编写REXX EXEC来执行此操作,这可能不需要解析读取的代码行。简单的IF条件会做,我想。

但这里有一些挑战,你会有,当然是可以避免的。

  1. ,如果与你的搜索内容一起存在哪些其它一些参数?像

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

  2. 如果搜索字符串跨多行跨越什么?像

    // STEP1 EXEC PGM = DUMY,

    // PARAM = XPTO

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) 
+0

你能指出一个手册吗? 我还没有使用过。 谢谢 – user823959