【问题标题】:How to Get Matching records from both F1 & F2 in output file1 and Non-Matching Records from F2 in output File 2 using Sort如何使用排序从输出文件 1 中的 F1 和 F2 中获取匹配记录,以及从输出文件 2 中的 F2 中获取不匹配记录
【发布时间】:2021-05-25 16:56:48
【问题描述】:

您好,我正在尝试从 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,11,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,FIELDS=(43,11,A)                            
  JOINKEYS F2=LOOKUP,FIELDS=(10,11,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,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,181) 
  OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:2,181) 
/*     

         

【问题讨论】:

  • 好的,已删除,谢谢

标签: mainframe dfsort


【解决方案1】:

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

问候, 暗部。

【讨论】:

  • 您好 Anbu,感谢您的回复。我实施了上述解决方案,并且 NOMATCH2 & 1 文件似乎复制了正确的数据。再次感谢。
【解决方案2】:

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

 JOINKEYS F1=MAIN,FIELDS=(43,11,A)
 JOINKEYS F2=LOOKUP,FIELDS=(10,11,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,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,181)
 OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,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 相同。

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 2023-04-04
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多