如何在JCL中配置HFS文件以适配ISRSUPC进行文件比对?
问题
我编写了如下JCL作业,尝试将数据集与HFS文件的内容进行比对:
//CHKOUTP EXEC PGM=ISRSUPC,PARM=(DELTAL,FILECMP) //NEWDD DD DSN=&TMP1,DISP=(OLD,DELETE) //OLDDD DD PATH='/u/gemuser/test/expout.txt',PATHOPTS=(ORDONLY) //OUTDD DD SYSOUT=A
但ISRSUPC似乎无法识别该HFS文件,得到如下输出:
ISRSUPC - MVS/PDF FILE/LINE/WORD/BYTE/SFOR COMPARE UTILITY- ISPF FOR z/OS NEW: SYS24173.T013517.RA000.TSTQFMT.TMP1.H01 OLD: ...PATH=.SPECIFIED... COMPARE SUMMARY LISTING (FILE COMPARE) DIFF SAME N-BYTES O-BYTES N-LINES O-LINES N-HASH-SUM O-HASH-SUM ** 1188 400 9 5 BC58F79D CBCCC86B PROCESS OPTIONS USED: NONE
请问应如何在JCL中编码HFS文件,才能让ISRSUPC正常使用它?我已查找ISRSUPC的示例,但均为数据集相关,未涉及HFS文件。
解决方案
ISRSUPC本身不支持直接读取HFS文件,必须先将HFS文件转换为MVS顺序数据集,再执行比对。具体操作如下:
新增HFS转数据集步骤
在原JCL前添加一个步骤,通过BPXBATCH调用shell命令把HFS文件复制到临时顺序数据集://COPYHFS EXEC PGM=BPXBATCH,PARM='sh cp /u/gemuser/test/expout.txt "//DD:HFSTODS"' //HFSTODS DD DSN=&TMP2,DISP=(NEW,PASS),SPACE=(TRK,(1,1)), // DCB=(RECFM=VB,LRECL=255,BLKSIZE=0) //STDOUT DD SYSOUT=A //STDERR DD SYSOUT=A注意DCB参数需匹配HFS文件的格式,文本文件一般用
RECFM=VB,LRECL=255即可。修改ISRSUPC的输入定义
把原JCL中OLDDD的HFS路径替换为转换后的临时数据集://CHKOUTP EXEC PGM=ISRSUPC,PARM=(DELTAL,FILECMP) //NEWDD DD DSN=&TMP1,DISP=(OLD,DELETE) //OLDDD DD DSN=&TMP2,DISP=(OLD,DELETE) //OUTDD DD SYSOUT=A替代方案:直接使用z/OS UNIX的diff命令
如果不需要ISRSUPC的输出格式,可直接通过BPXBATCH调用UNIX的diff工具完成比对,无需转换数据集://COMPARE EXEC PGM=BPXBATCH,PARM='sh diff <(cat //DD:NEWDS) /u/gemuser/test/expout.txt' //NEWDS DD DSN=&TMP1,DISP=(OLD,DELETE) //STDOUT DD SYSOUT=A //STDERR DD SYSOUT=A
内容的提问来源于stack exchange,提问作者Morag Hughson
相关产品推荐
相关产品推荐

