1

複数のJCLで検索置換を実行しようとしていますが、複数行の機能が必要です。複数の行を置換する必要があります。例:

//STEP1 EXEC PGM=DUMY,PARAM=XPTO

に変換します

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

ファイルエイドのバッチ処理を調べましたが、複数行のサポートなしでSTRINGの置換のみをサポートしているようです。私はREXXがそれをするかもしれないと思いますが、私はそれについての知識がありません。

何か案は?

4

3 に答える 3

1

JCL構文を理解し、この種のことを実行できる商用製品があります。 JOB / SCANはその1つであり、この製品分野の他の人もそれを実行できると確信しています。

あなたがそのような製品を持っていなければ、これは役に立たないので、私たちはあなたのRexxコメントに戻ります。はい、Rexxを使用してこれを行うことができますが、JCLを解析することになります。要件によっては、これは簡単ではない場合があります。Rexxには正規表現の一致がありません。これは、解析時に通常使用されるものです。それは可能であり、あなたが示したことよりもはるかに複雑なことをしようとしないのであれば、Rexxプログラマーにとっておそらくそれほど難しいことではありません-おそらくこれは1つになる機会です。Rexxは、その設計目標の1つとして、プログラミングを容易にすることを目的としていました。

別の方法は、Perlを使用して、PDSメンバーをUnixファイルシステムにコピーして処理できるようにし、完了したらコピーして戻すことです。比較的最新のリリースのz/OSを実行していて、システムプログラマーがPerlのz / OSポートをインストールしていると仮定します。これは、無料のアイテムです。

影響を受けるメンバーをUnixファイルシステムにコピーする場合は、 awkを使用してこれを実行できる可能性があります。私はawkに手を出しただけですが、デフォルトでそこにあるだけで、デフォルトでまだそこにないもの(Perl)をインストールする必要がないという利点があります。

于 2011-11-05T14:05:58.887 に答える
1

これが私の頭の中にある可能性です:

  1. 必要なSTRINGを検索し、追加したい/必要なものに置き換える単純なCOBOLプログラムを作成できます。
  2. これを実行するためにREXXEXECを作成することもできます。これにより、読み取られるコード行を解析する必要がなくなる場合があります。単純なIF条件で十分だと思います。

しかし、ここにあなたが抱えるであろういくつかの課題があり、もちろん回避可能です。

  1. 検索対象と一緒に他のパラメータが存在する場合はどうなりますか?お気に入り

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

  2. 検索文字列が複数の行にまたがっている場合はどうなりますか?お気に入り

    // STEP1 EXEC PGM = DUMY、

    // PARAM = XPTO

于 2011-11-07T17:13:27.480 に答える
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) 
于 2011-11-08T22:03:33.363 に答える