IBM大型机论坛索引
 
 登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答  寄存器
 

如何删除重复的记录?


IBM大型机论坛 -> JCL& VSAM
 发表新话题     回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
沙伯利根

新的用户


已加入:2010年6月7日
帖子:59
地点:哥印拜陀

 发布 发表:2012年4月17日,星期二,上午9:27
 引用回复

大家好,

我有一个带有LRECL 80的PS文件。在那个文件中,我有一个公共标签中的记录。开头标签:原始(1-8)结束标签:ENDMSG(1-6)。我有唯一的键Acct Num(PIC 9(10))和Emp num(PIC 9(9))。我需要删除多次发生的整个记录​​集。

输入文件:
码:


原版的: xxxyyy
帐号: 1234567890
Emp Num: 098789076
.
.
.
ENDMSG;
原版的: xxxyyy
帐号: 1234567890
Emp Num: 098789076
.
.
.
ENDMSG;
原版的: Yabcyyy
帐号: 8736450987
Emp Num: 098720987
.
.
.
ENDMSG;



输出文件:

码:

原版的: xxxyyy
帐号: 1234567890
Emp Num: 098789076
.
.
.
ENDMSG;
原版的: Yabcyyy
帐号: 8736450987
Emp Num: 098720987
.
.
.
ENDMSG;


我的输出文件LRECL是相同的80。

我必须使用SYNCSORT实用程序来实现此目的。请帮助我。
回到顶部
查看用户资料 发送私信
侠客

活跃用户


已加入:2008年1月22日
职位:117
地点:自由城

 发布 发表:2012年4月17日,星期二,下午4:00
 引用回复

您好,

试试下面的代码片段,

码:
// STEP01  EXEC PGM=SYNCTOOL                               
// DFSMSG  DD SYSOUT = *                                     
// TOOLMSG DD SYSOUT = *                                     
// SYSOUT  DD SYSOUT = *                                     
// IN1      DD *                                           
: XXXYYY                                         
交流编号: 1234567890                                     
编号: 098789076                                       
.                                                         
.                                                         
.                                                         
ENDMSG;                                                    
: XXXYYY                                         
交流编号: 1234567890                                     
编号: 098789076                                       
.                                                         
.                                                         
.                                                                 
ENDMSG;                                                            
: YABCYYY                                                 
交流编号: 8736450987                                             
编号: 098720987                                               
.                                                                 
.                                                                 
.                                                                 
ENDMSG;                                                            
/*                                                               
// OUT1  DD DSN=&TMP1,                                             
//         DISP=(MOD,PASS,DELETE),                               
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,                     
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA                   
// OUT2  DD DSN=&TMP2,                                             
//         DISP=(MOD,PASS,DELETE),                               
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,                     
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA                   
// OUT3  DD DSN=&TMP3,                                             
//         DISP=(MOD,PASS,DELETE),                               
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,                     
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA       
// OUT4  DD DSN=&TMP4,                               
//         DISP=(MOD,PASS,DELETE),                   
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,         
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA       
// TOOLIN    DD *                                                     
  COPY FROM(IN1) TO(OUT4) USING(CTL1)                               
  COPY FROM(OUT4) TO(OUT1) USING(CTL2)                             
  SELECT FROM(OUT1) TO(OUT2) ON(90,10,ZD) FIRSTDUP                 
  COPY FROM(OUT2) TO(OUT3) USING(CTL3)                             
/*                                                                 
// CTL1CNTL DD *                                                      
  INREC IFTHEN =(WHEN=INIT,                                         
                OVERLAY=(90:SEQNUM,10,ZD)),                         
        IFTHEN =(WHEN=(1,4,CH,EQ,C'ACCT'),OVERLAY=(90:11,10))       
/*                                                                 
// CTL2CNTL DD *                                                      
  INREC IFTHEN =(WHEN=GROUP,                                         
                BEGIN=(1,8,CH,EQ,C''),                     
                END =(1,6,CH,EQ,C'ENDMSG'),                         
                PUSH = (81:ID=5))                     
/*                                                 
// CTL3CNTL DD *                                      
  OUTREC FIELDS=(1:81,5)                           
/*                                                 
// *                                                  
// STEP00   EXEC PGM=SORT                           
// SYSOUT   DD SYSOUT=*                             
//整理  DD SYSOUT = *                             
// SORTJNF1 DD DSN =&TMP1,DISP=SHR                   
// SORTJNF2 DD DSN =&TMP3,DISP=SHR                   
//SYSIN DD *                                        
 JOINKEYS FILE = F1,FIELDS =(81,5,A)                   
 JOINKEYS FILE = F2,FIELDS =(1,5,A)                   
 SORT FIELDS=COPY                                   
 仅加入F1,                             
 REFORMAT FIELDS=(F1:1,80)     


输入:
码:
: XXXYYY                                   
交流编号: 1234567890                               
编号: 098789076                                 
.                                                   
.                                                   
.                                                   
ENDMSG;                                              
: XXXYYY                                   
交流编号: 1234567890                               
编号: 098789076                                 
.                                                   
.                                                   
.                                                   
ENDMSG;                                              
: YABCYYY                                   
交流编号: 8736450987                               
编号: 098720987                                 
.                                                   
.                                                   
.                                                   
ENDMSG;      


输出:
码:
: XXXYYY                             
交流编号: 1234567890                         
编号: 098789076                           
.                                           
.                                           
.                                           
ENDMSG;                                      
: YABCYYY                           
交流编号: 8736450987                         
编号: 098720987                           
.                                           
.                                           
.                                           
ENDMSG;
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

 发布 发表:2012年4月17日,星期二,下午6:06
 引用回复

原始值与您的匹配相关吗?

编号在文件中是唯一的,还是仅与ACCT NUM唯一(可能重复)?
回到顶部
查看用户资料 发送私信
沙伯利根

新的用户


已加入:2010年6月7日
帖子:59
地点:哥印拜陀

 发布 发表:2012年4月17日,星期二,7:46 pm
 引用回复

你好

侠客 ,感谢您的信息。但是,在SYNCSORT中是否有可能?

引用:

编号在文件中是唯一的,还是仅与ACCT NUM唯一(可能重复)


Acct Num和Emp Num是两个不同的值。


如果是这样
码:

交流编号: 1234567890                                     
编号: 0987890C6           

交流编号: 1234567890                                     
编号: 0987890C6

交流编号: 1234567800                                     
编号: 098789076

交流编号: 1234567800                                     
编号: 098789076


输出应为:

码:
交流编号: 1234567890                                     
编号: 0987890C6

交流编号: 1234567800                                     
编号: 098789076

我必须比较Acct Num和EMP Num。如果Acct num和Emp num一起出现多次,则我必须删除整个记录集。


注意:EMP NUM是PIC x(9)。很抱歉给您带来不便。
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

 发布 发表:2012年4月17日,星期二,7:54 pm
 引用回复

引用:
引用:

编号在文件中是唯一的,还是仅与ACCT NUM唯一(可能重复)


Acct Num和Emp Num是两个不同的值。


天哪,我惊呆的数量是无止境的:-)

这不是我问的问题。从不同的名称可以明显看出它们是不同的东西。

Emp Num是否可以存在多个Acct Num下?

关于原件的问题有任何答案吗?

如果您想尝试Xavier的解决方案,为什么不呢?您是说必须与PGM = SORT一起使用吗?
回到顶部
查看用户资料 发送私信
沙伯利根

新的用户


已加入:2010年6月7日
帖子:59
地点:哥印拜陀

 发布 发表:2012年4月17日,星期二,晚上8:27
 引用回复

法案,

引用:
Emp Num是否可以存在多个Acct Num下


是的,可以。

引用:
关于原件的问题有任何答案吗?


原始值只是标题值,在第9位之后可能会有所不同。

只允许我使用syncsort。请让我知道是否需要进一步的信息。
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

 发布 发表:2012年4月17日,星期二,9:47 pm
 引用回复

您好,

建议您提交提供的代码,然后在此处回发。 。 。
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

 发布 发表:2012年4月17日,星期二,9:47 pm
 引用回复

好的,使用Syncsort,您需要执行多个步骤。

我看到您是一名程序员,因此,如果您一步一步需要它,那么它必须是一个程序。

第一步:

将GROUP ID添加到主文件。使用ACCT / EMP / GROUP ID创建KEY文件。

第二步:

重复数据删除密钥(您可以在第一步中执行此操作)

第三步:

从Main和Key加入ID,忽略不匹配项。

Main和Key的GROUP ID应该以“ 原版的”开头。

要获取密钥,您将需要第二个GROUP来按ACCT。

获得EMP时,您将拥有ACCT,并可以创建ACCT,EMP和ID的密钥(来自原始文件)。
回到顶部
查看用户资料 发送私信
沙伯利根

新的用户


已加入:2010年6月7日
帖子:59
地点:哥印拜陀

 发布 发表:2012年4月20日,星期五4:21上午
 引用回复

感谢您的建议法案。

Xavier的解决方案在第一次出现时就删除了重复项。输入文件中可能多次出现。喜欢,

码:

: XXXYYY                                   
交流编号: 1234567890                               
编号: 098789076                                 
.                                                   
.                                                   
.                                                   
ENDMSG;                                              
: XXXYYY                                   
交流编号: 1234567890                               
编号: 098789076                                 
.                                                   
.                                                   
.                                                   
ENDMSG;                                              
: YABCYYY                                   
交流编号: 8736450987                               
编号: 098720987                                 
.                                                   
.                                                   
.                                                   
ENDMSG;      
: XXXYYY                                   
交流编号: 1234567890                               
编号: 098789076                                 
.                                                   
.                                                   
.                                                   
ENDMSG;
: XXXYYY                                   
交流编号: 1234567890                               
编号: 098789076                                 
.                                                   
.                                                   
.                                                   
ENDMSG;

我的输出应为:
码:

: XXXYYY                             
交流编号: 1234567890                         
编号: 098789076                           
.                                           
.                                           
.                                           
ENDMSG;                                      
: YABCYYY                           
交流编号: 8736450987                         
编号: 098720987                           
.                                           
.                                           
.                                           
ENDMSG;


我试过像使用NODUPS,ALLDUPS选项,但效果不佳。

我也删除了JOIN UNPAIRED COND,但是由于REFORMAT FIELDS是强制性的,所以它抛出了ABENDU0016。

您能否建议如何删除重复出现的多次事件。
类似于SUM FIELDS = NONE。
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

 发布 发表于:星期五四月20,2012 4:41上午
 引用回复

这些问题相互联系吗?相同的数据?还是不同?

您尝试过排序解决方案了吗?如果数据相同,则只需添加SUM FIELDS = NONE。如果数据不同,请修改排序解决方案并添加SUM FIELDS = NONE。

如果所有这些都是相同的数据,那么您可以尝试将所有需求全部放在一起吗?我有点不了解类似数据的含义。
回到顶部
查看用户资料 发送私信
侠客

活跃用户


已加入:2008年1月22日
职位:117
地点:自由城

 发布 发表:2012年4月20日,星期五5:14 pm
 引用回复

您好,

引用:
我也删除了JOIN UNPAIRED COND,但是由于REFORMAT FIELDS是强制性的,所以它抛出了ABENDU0016。


我不明白你为什么要把这个复杂化。

请记住,REFORMAT字段是必填字段,而不是UNPAIRED选项。

引用:
解决方案在第一次出现时删除重复项


您的要求不断变化,

尝试以下(未试用)代码段

码:
// STEP01  EXEC PGM=ICETOOL                             
// DFSMSG  DD SYSOUT = *                                 
// TOOLMSG DD SYSOUT = *                                 
// SYSOUT  DD SYSOUT = *                                 
// IN1      DD *                                         
: XXXYYY                                       
交流编号: 1234567890                                   
编号: 098789076                                     
.                                                     
.                                                     
.                                                     
ENDMSG;                                                
: XXXYYY                                       
交流编号: 1234567890                                   
编号: 098789076                                     
.                                                 
.                                                 
.                                                 
ENDMSG;                                            
: YABCYYY                                 
交流编号: 8736450987                             
编号: 098720987                               
.                                                 
.                                                 
.                                                 
ENDMSG;                                            
: XXXYYY                                 
交流编号: 1234567890                             
编号: 098789076                               
.                                                 
.                                                 
.                                                 
ENDMSG;                                            
: XXXYYY                                 
交流编号: 1234567890                             
编号: 098789076                               
.                                                 
.                                                           
.                                                           
ENDMSG;                                                      
/*                                                         
// OUT1  DD DSN=&TMP1,                                       
//         DISP=(MOD,PASS,DELETE),                         
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,               
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA             
// OUT2  DD DSN=&TMP2,                                       
//         DISP=(MOD,PASS,DELETE),                         
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,               
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA             
// OUT3  DD DSN=&TMP3,                                       
//         DISP=(MOD,PASS,DELETE),                         
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,               
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA             
// OUT4  DD DSN=&TMP4,                                       
//         DISP=(MOD,PASS,DELETE),                         
//             RECFM = FB,LRECL = 100,BLKSIZE = 0,               
//         SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA             
// OUT8  DD SYSOUT = *                                                 
// TOOLIN    DD *                                                     
  COPY FROM(IN1) TO(OUT1) USING(CTL1)                               
  COPY FROM(OUT1) TO(OUT2) USING(CTL2)                             
  SORT FROM(OUT2) TO(OUT3) USING(CTL4)                             
  COPY FROM(OUT3) TO(OUT4) USING(CTL3)                             
/*                                                                 
// CTL1CNTL DD *                                                      
  INREC IFTHEN =(WHEN=INIT,                                         
                OVERLAY=(90:C'0000000000')),                       
        IFTHEN =(WHEN=(1,4,CH,EQ,C'ACCT'),OVERLAY=(90:11,10))       
/*                                                                 
// CTL2CNTL DD *                                                      
  INREC IFTHEN =(WHEN=GROUP,                                         
                BEGIN=(1,8,CH,EQ,C''),                     
                END =(1,6,CH,EQ,C'ENDMSG'),                         
                PUSH = (81:ID=5))                                     
/*                                                                 
// CTL3CNTL DD *                                                      
  OUTREC FIELDS=(1:81,5)                                           
/*                                                                 
// CTL4CNTL DD *                                                      
  排序字段=(90,10,CH,A)                             
  SUM FIELDS=NONE                                       
  OMIT COND=(90,10,CH,EQ,C'0000000000')                 
/*                                                     
// *                                                      
// STEP00   EXEC PGM=SORT                               
// SYSOUT   DD SYSOUT=*                                 
//整理  DD SYSOUT = *                                 
// SORTJNF1 DD DSN =&TMP2,DISP=SHR                       
// SORTJNF2 DD DSN =&TMP4,DISP=SHR                       
//SYSIN DD *                                            
 JOINKEYS FILE = F1,FIELDS =(81,5,A)                       
 JOINKEYS FILE = F2,FIELDS =(1,5,A)                       
 SORT FIELDS=COPY                                       
 REFORMAT FIELDS=(F1:1,80)


如果我的假设是正确的,则可能需要根据A / c否或原始消息对它进行调整以再次对其进行排序,除非您希望保留未排序的顺序,那么这可能会起作用。
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

 发布 发表:2012年4月20日,星期五5:40 pm
 引用回复

萨伯

据我了解,Acct Num和Emp Num共同构成一个唯一键(可能存在重复项)。

我们知道Emp Num可以出现在多个Acct Num下。我不知道,但是假设Acct Num可以有多个Emp Num。它可以?
回到顶部
查看用户资料 发送私信
沙伯利根

新的用户


已加入:2010年6月7日
帖子:59
地点:哥印拜陀

 发布 发表:2012年4月20日,星期五9:44 pm
 引用回复

侠客 ,你很棒。该代码可以正常工作。再次感谢..!!
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

 发布 发表:2012年4月20日,星期五11:38 pm
 引用回复

比尔·伍德格写道:
萨伯

据我了解,Acct Num和Emp Num共同构成一个唯一键(可能存在重复项)。

我们知道Emp Num可以出现在多个Acct Num下。我不知道,但是假设Acct Num可以有多个Emp Num。它可以?


那么我将其作为否定...这将使Acct Num具有唯一性(可能重复)。
回到顶部
查看用户资料 发送私信
沙伯利根

新的用户


已加入:2010年6月7日
帖子:59
地点:哥印拜陀

 发布 发表:2012年4月20日,星期五11:53 pm
 引用回复

对不起,比尔错过了你的谈话。

回答您的查询,
引用:
我们知道Emp Num可以出现在多个Acct Num下。我不知道,但是假设Acct Num可以有多个Emp Num。它可以?


是的,它可以有多个Emp Num作为Acct Num。
回到顶部
查看用户资料 发送私信
比尔·伍德格

主持人荣誉


加入时间:2011年3月9日
帖子:7311
位置:矩阵内部

 发布 发表:星期六2012年4月21日上午12:31
 引用回复

您是否以此测试过Xavier?

以防万一,这是另一个要测试的。一遍数据。我为相同的Acct Num包括了两个Emp Num。

码:
// SDDMULTR EXEC PGM =排序
// SYSOUT   DD SYSOUT=*
//整理 DD SYSOUT = *
//SYSIN DD *
   INREC IFTHEN =(WHEN=GROUP,BEGIN=(1,9,CH,EQ,C'ORIGINAL:'),
                              PUSH = (081:1,80)),
         IFTHEN=(WHEN=GROUP,BEGIN=(1,9,CH,EQ,C'ACCT NUM:'),
                             END=(1,9,CH,EQ,C'ORIGINAL:'),
                              PUSH = (161:1,80)),
         IFTHEN=(WHEN=GROUP,BEGIN=(1,7,CH,EQ,C'EMP NUM:'),
                             END=(1,9,CH,EQ,C'ORIGINAL:'),
                              PUSH = (241:1,80))
                                                           
   SORT FIELDS=(171,10,CH,A,249,10,CH,A),EQUALS
                                                           
   OUTREC IFTHEN =(WHEN=INIT,OVERLAY=(321:171,10,249,10,
                   SEQNUM,5,ZD,RESTART=(321,20))),
          IFTHEN =(WHEN=GROUP,BEGIN=(1,7,CH,EQ,C'EMP NUM:'),
                             END=(1,9,CH,EQ,C'ORIGINAL:'),
                             PUSH=(341:341,5))
                                                           
   OUTFIL OMIT=(1,9,CH,EQ,C'ORIGINAL:',
             或,1,9,CH,EQ,C'ACCT NUM:',
             OR,341,5,ZD,NE,1),
          IFOUTLEN=80,
          IFTHEN =(WHEN=(1,7,CH,EQ,C'EMP NUM:'),
            BUILD=(081,80,/,
                   161,80,/,
                   001,80))
                                                           
// SORTIN DD *
: AAAYYY
交流编号: 1234567890
编号: 111111111
.
.
.
ENDMSG;
: XXXYYY
交流编号: 1234567890
编号: 098789076
.
.
.
ENDMSG;
: XXXYYY
交流编号: 1234567890
编号: 098789076
.
.
.
ENDMSG;
: YABCYYY
交流编号: 8736450987
编号: 098720987
.
.
.
ENDMSG;
: XXXYYY
交流编号: 1234567890
编号: 098789076
.
.
.
ENDMSG;
: XXXYYY
交流编号: 1234567890
编号: 098789076
.
.
.
ENDMSG;



给出以下输出:

码:
: XXXYYY   
交流编号: 1234567890
编号: 098789076 
.                   
.                   
.                   
ENDMSG;              
: AAAYYY   
交流编号: 1234567890
编号: 111111111 
.                   
.                   
.                   
ENDMSG;              
: YABCYYY   
交流编号: 8736450987
编号: 098720987 
.                   
.                   
.                   
ENDMSG;


请通过Xavier尝试该测试数据。

确实比我以前建议的只是“加和字段= none”要多一点:-),但不多。如果您想在其中戳戳,可能会有一些枯木。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
 发表新话题     回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> JCL& VSAM

 


类似主题
话题 论坛 回覆
 没有新帖 选择多个常量记录 DB2 3
该主题已锁定:您无法编辑帖子或回复。 将匹配的记录写入输出文件 DFSORT / ICETOOL 11
 没有新帖 合并两个以上的记录 DFSORT / ICETOOL 15
 没有新帖 匹配和不匹配记录使用 DFSORT / ICETOOL 11
 没有新帖 撤消DB2以除去用户 DB2 4
搜索我们的论坛:


 回到顶部