2011-11-05 76 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