如何使用jcl比较多个文件

Posted

技术标签:

【中文标题】如何使用jcl比较多个文件【英文标题】:how to compare multiple files using jcl 【发布时间】:2020-05-14 10:59:41 【问题描述】:

我有一个要求,我从上游应用程序接收 6 个文件到 GDG。我想将所有 6 个版本相互比较以查看是否有重复,即进来的两个或多个文件可能是重复的(上游错误地发送了两次或多次)。 您能否帮助提供使用 JCL 或 Cobol 的解决方案?

【问题讨论】:

【参考方案1】:

最好的办法是使用 ISPF 比较工具(ISPF 3.13 - SuperC 或 3.13 - SuperCE)来比较文件,但选择后台执行而不是前台。这将创建一个批处理作业,您可以将其用作要包含在作业中的步骤的模板:

//SUPERC  EXEC PGM=ISRSUPC,PARM=(DELTAL,LINECMP,' SEQ','') 

//NEWDD   DD DISP=SHR,DSN=new.dataset 
//OLDDD   DD DISP=SHR,DSN=old.dataset   
//OUTDD   DD SYSOUT=* 

请记住,ISPF 比较仅比较 2 个文件;要比较 6,您需要 15 个步骤(我认为)。

如果您的站点有 PDSMAN,那么您可以使用其 PDSM37 模块为每个数据集生成一个校验和,并使用一个小的 REXX 轻松比较这 6 个校验和。

【讨论】:

【参考方案2】:

如果它们是结构正确的数据集(它们不是文件),那么它们应该有标题记录。您需要做的就是比较每个数据集的第一条记录。您可以使用您的排序产品或批量使用 ISRSUPC。

JCL 不能这样做,因为 JCL 只告诉操作系统执行该任务需要哪些程序和资源。所以即使是 COBOL 解决方案也需要 JCL。

最后,我相信你说的是世代没有版本。版本与GxxxxV后面的编号有关。

【讨论】:

z/OS 中没有规定每个文件都需要唯一的标头记录。 @Steve Ives:我并没有这样说或暗示。 好的,抱歉。你能解释一下“它们应该有标题记录”是什么意思吗?为什么比较每个文件的第一条记录是一种确定两个数据集是否相同的方法? 您不能使用 ISRSUPC 仅比较第一条记录,即使可以,它也不会告诉您文件是否相同。第一条记录可能相同,但其余文件可能不同。 没错,你不能使用 SUPERC,但你可以使用 DFSort(连接键),如果标题在那里并且它们相同,则表明两个数据集包含相同的数据。当然取决于您在标题记录中包含哪些数据,例如日期和时间以及运行顺序。

以上是关于如何使用jcl比较多个文件的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将输入文件的选定列复制到jcl排序中的输出文件

如何保护 JCL FTP 中的存储密码?

如何调试 JCL

如何在 JCL 中引用最新的物理顺序 (PS) 文件

如何通过 JCL 将参数传递给 REXX 程序

如何通过 jcl 获取当前的 GDG 版本