微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用排序从输出文件 1 中的 F1 和 F2 中获取匹配记录,并从输出文件 2 中的 F2 中获取非匹配记录

如何解决如何使用排序从输出文件 1 中的 F1 和 F2 中获取匹配记录,并从输出文件 2 中的 F2 中获取非匹配记录

嗨,我正在尝试从 2 个文件中查找匹配和不匹配的记录,一个文件是带有 181 LRECL 的错误文件,第二个文件 F2 是具有相同 181 LRECL 的有效记录文件

示例错误文件

12345678901
11111111111
11111111111
22222222222

有效文件

33333333333
11111111111
11111111111
44444444444

我实现了左外连接

//F1       -> ERROR FILE
//F2       -> VALID FILE
//SYSOUT   DD SYSOUT=*                                                       
//SYSIN    DD *                                                       
  JOINKEYS F1=MAIN,FIELDS=(43,11,A)                            
  JOINKEYS F2=LOOKUP,FIELDS=(10,A)                               
  JOIN UNPAIRED,F2 ONLY                                                
  SORT FIEDLS=copY
/*   

           

所以使用这个我能够得到在 sysout 的错误文件中不存在的有效记录

系统输出

33333333333
44444444444

但我不想丢失两个文件中的匹配记录,并希望将两个文件中的匹配记录写入第二个输出文件中。

我尝试实施

FULL OUTER Join,但无法得到结果

//F1 -> Error File
//F2 -> Valid File
//MATCH    DD DSN=MYDATA.URMI.SAMPLE.MATCH,disP=OLD
//NOMATCH1 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH1,disP=OLD
//NOMATCH2 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH2,disP=OLD 
//SYSOUT   DD SYSOUT=*                                                       
//SYSIN    DD *                                                       
  JOINKEYS F1=MAIN,F1,F2                                                 
  REFORMAT FIELDS=(?,F1:1,181,F2:1,181)                                
  OPTION copY                                                         
  OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,181)                                                
  OUTFIL FNAMES=NOMATCH1,C'1'),181) 
  OUTFIL FNAMES=NOMATCH2,C'2'),181) 
/*     

         

解决方法

根据上面的快照,您首先重新格式化了 181 字节的错误文件,然后是 181 字节的 VALID 文件。因此,在编写 NOMATCH2 文件时,您应该构建为 BUILD=(1:183,181) 而不是 BUILD=(1:2,181)。希望这能解决您的问题,如果您仍然无法解决问题,请在此处更新。

问候, 暗部。

,

为了完整起见,我发布了更新后的脚本和生成的输出文件:

 JOINKEYS F1=MAIN,FIELDS=(43,11,A)
 JOINKEYS F2=LOOKUP,FIELDS=(10,A)
 JOIN UNPAIRED,F1,F2
 REFORMAT FIELDS=(?,F1:1,181,F2:1,181)
 OPTION COPY
 OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,181)
 OUTFIL FNAMES=NOMATCH1,C'1'),181)
 OUTFIL FNAMES=NOMATCH2,C'2'),BUILD=(1:183,181)

输出文件 MATCH 应包含:

11111111111
11111111111
11111111111
11111111111

输出文件 NOMATCH1 应包含:

12345678901
22222222222

输出文件 NOMATCH2 应包含:

33333333333
44444444444

这是使用 AHLSORT for Windows v14r3-117-ge2d0a249 验证的,但结果应该与 DFSORT for z/OS 相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。