MVS用のC言語プロセッサー(コンパイラー)か?とも思える名前ですがそうではありません。SuperCは、ISPFによって提供される、データセットの比較や文字列の探索を行うユーティリティーです。ダイアログとバッチの両方で使用でき、ISRSUPCはバッチ処理などで指定するプログラム・モジュール名です。
MVSには昔からIEBCOMPRというデータセットの比較を行うユーティリティーがありますが、機能的には今ひとつです。比較する2つのデータセットが同じであるかどうかを調べる程度ならいいのですが、違った場合にどこがどう違うということを詳しく調べる機能はありません。違いがあるレコードの内容はダンプされますが、そのレコード内のどこが違っているかまでは表示されません。データ・レコードなどで、双方のレコード数は同じであるが一部に内容が異なる部分があるらしい、という場合にはIEBCOMPRでもそれなりに使えますが、新旧のJCLやソース・プログラムの相違点を見出したい、といった場合はまるで役に立ちません。そのような場合、SuperCは大いに威力を発揮します。内容が異なっているかどうかだけでなく、挿入や削除がされたレコードかどうか、区分データセットの場合は片方のデータセットにしか存在しないメンバーかどうか、などの判別もできます。探索では区分データセットの複数のメンバーに渡って文字列を検索するGrep機能も併せ持っています。
データセットをバイト単位に比較する
1 2 3 4 5 6 7 |
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- //SUPERC EXEC PGM=ISRSUPC, // PARM=(DELTAL,BYTECMP,'','') //OUTDD DD SYSOUT=* //OLDDD DD DISP=SHR,DSN=OLD Dataset //NEWDD DD DISP=SHR,DSN=NEW Dataset // |
2つのデータセットの相違点がバイト単位に判別されます。
JCL やソース・モジュール・メンバーを比較する
1 2 3 4 5 6 7 8 9 |
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- //SUPERC EXEC PGM=ISRSUPC, // PARM=(DELTAL,LINECMP,'','') //OUTDD DD SYSOUT=* //OLDDD DD DISP=SHR,DSN=OLD Library //NEWDD DD DISP=SHR,DSN=NEW Library //SYSIN DD * SELECT MAIN01,MAIN02,SUBRTN3 // |
2つの区分データセットを比較します。指定されたメンバーが行単位に比較され、不一致行、挿入や削除がなされた行などが判定されます。SELECTステートメントを省略すれば全てのメンバーが比較されます。LINECMPではレコード単位でデータセットが比較され、プログラムのソース・コードやJCLなどの新旧バージョンの相違点をピックアップしたい場合に適しています。
区分データセットのメンバーにGrep検索を行う
1 2 3 4 5 6 7 8 9 |
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- //SUPERC EXEC PGM=ISRSUPC, // PARM=(SRCHCMP,'') //OUTDD DD SYSOUT=* //NEWDD DD DISP=SHR,DSN=PDS Library //SYSIN DD * SRCHFOR 'IDCAMS' SRCHFOR X'C5E7C5C3' // |
区分データセット内のメンバーにGrep検索を掛けます。探索文字列はSRCHFORステートメントで指定します。
記録を残す必要がなければISPFのオプション3.12や3.14あるいは3.13や3.15でSuperC/SuperCEをパネル操作で実行できます。その他SuperCに関してはこちらの記事「バッチJOBで文字列検索」も参考にして下さい。