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

将多个记录合并为一个


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

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月22日星期一1:54 pm
引用回复

大家好,

我刚刚在你们的帮助下完成了一项任务。

在处理我的tsak时,我再次遇到了问题。

那就是我有一个LRECL = 400的文件,其中从1到99和122到278的字段相同。其余20位具有开始日期和结束日期。

我需要一个排序卡,以便它将重复的行合并为最早的开始日期和最晚的结束日期的一行。例如:-

输入

(1-99); 01/01/2006; 01/07/2007;(122-278)
(1-99); 01/09/2007; 02/05/2008;(122- 278)
(1-99); 02/15/2008; 09/05/2008;(122- 278)


出PUT

(1-99); 01/01/2006; 09/05/2008;(122- 278)

我想可以通过使用include语句来完成。

你们能否告诉HW从这种需求类型开始。


提前致谢。
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


已加入:2006年10月17日
帖子:2481
位置:@我的办公桌

发布发表:2008年9月22日星期一2时19分
引用回复

你好

关键字段从什么开始?是1-99和122-178吗?

谢谢,
阿伦
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月22日星期一2:47 pm
引用回复

嗨,阿伦

起始日期字段从位置100到109开始,结束日期从111到120。

除了这些内容外,重复记录的其他所有内容都是相同的,即位置1-99和位置122-400相同。

请让我知道我是否清楚你吗?
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月22日星期一4:12 pm
引用回复

大家好,

请在我的输入文件下面找到

码:


---- 7 ---- + ---- 8 ---- + ---- 9 ---- + ---- 0 ---- + ---- 1 ---- + ---- 2 ---- + ---- 3 ---- +-
<---VALUE1                     -->2008年7月21日; 2008年7月25日<--- value2--
<---VALUE1                     -->07/28/2008; 08/01/2008<--- value2--
<---VALUE3                      ->08/05/2008; 08/08/2008<--- value4--
<---VALUE3                      ->08/11/2008; 08/13/2008<--- value4--



我的输出应该是

码:


---- 7 ---- + ---- 8 ---- + ---- 9 ---- + ---- 0 ---- + ---- 1 ---- + ---- 2 ---- + ---- 3 ---- +-
<---VALUE1                     -->2008年7月21日; 2008年8月1日<--- value2--
<---VALUE3                      ->08/05/2008; 08/13/2008<--- value4--



你们能帮我做这个吗?

我想您可以轻松满足我的要求。

提前致谢。
回到顶部
查看用户资料 发送私信
钦南

新的用户


已加入:2006年10月18日
帖子:73

发布发表:2008年9月22日星期一6:28 pm
引用回复

好,

根据START-DATE,然后根据END-DATE和关键字对记录进行排序。 (请记住,将这两个字段保持在排序键的结尾)

然后在原始键上使用拼接(不包括这两个字段)以覆盖END-DATE字段。
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月22日星期一6:40 pm
引用回复

你好

感谢您的回复。我已经按照升序开始日期和降序结束日期进行了排序。
但是我不知道如何使用该SPLICE。

请在下面填写我的分类卡,
码:

// SYSIN DD     *                                                     
          SORT FIELDS=(1,99,CH,A,100,10,CH,D,111,10,CH,D,122,278,CH,A)
                                                                     



您能否给我一些拼接示例,以便继续进行下一步以获取输出。
回到顶部
查看用户资料 发送私信
钦南

新的用户


已加入:2006年10月18日
帖子:73

发布发表:2008年9月22日星期一6:54 pm
引用回复

如果我理解正确,这就是您的排序方式。

码:


       SORT FIELDS=(1,99,CH,A,       
                    122,156,CH,A,     
                    106,04,CH,A,     
                    103,02,CH,A,     
                    100,02,CH,A,     
                    110,02,CH,A,     
                    113,02,CH,A,     
                    116,02,CH,A)     


您能否检查一下并让我知道,是否可以很好地处理数据。如果工作正常
您能给我寄一份输入和输出数据的样本,以便我可以相应地给您一张接头卡。
回到顶部
查看用户资料 发送私信
钦南

新的用户


已加入:2006年10月18日
帖子:73

发布发表:2008年9月22日星期一7:00 pm
引用回复

抱歉,

它应该是

码:


排序字段=(1,99,CH,A,       
                    122,156,CH,A,     
                    106,04,CH,A,     
                    103,02,CH,A,     
                    100,02,CH,A,     
                    117,02,CH,A,     
                    114,02,CH,A,     
                    111,02,CH,A) 


回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月22日星期一7:26 pm
引用回复

好吧,我已经尝试过了,但是在领域上有些不匹配,

所以我照你说的做了

新的SORT卡看起来像

码:


排序字段=(1,99,CH,A,       
                    106,04,CH,A,     
                    103,02,CH,A,     
                    100,02,CH,A,     
                    117,04,CH,A,     
                    114,02,CH,A,     
                    111,02,CH,A,
                    122,278,CH,A)



现在工作正常。
输入如下

码:

--9 ---- + ---- 0 ---- + ---- 1 ---- + ---- 2 ---- + ---- 3 ---- +- --4 ---
WMAC; Y; ​​GWHR; 07/21/2008; 07/25/2008;逐渐减少的时间
WMAC; Y; ​​GWHR; 07/28/2008; 08/01/2008;逐渐减少的工作时间
WOAC; Y; ​​GWHR; 08/05/2008; 08/08/2008; gradaul rtw时间表 
WOAC; Y; ​​GWHR; 08/11/2008; 08/13/2008; Gradaul Rtw时间表 
WMAC; Y; ​​GWHR; 06/11/2008; 06/17/2008;减少计划     
WMAC; Y; ​​GWHR; 06/18/2008; 06/25/2008;减少计划     


回答输出如下


码:
 
WMAC; Y; ​​GWHR; 07/21/2008; 07/25/2008;逐渐减少的时间
WMAC; Y; ​​GWHR; 07/28/2008; 08/01/2008;逐渐减少的工作时间
WOAC; Y; ​​GWHR; 08/05/2008; 08/08/2008; gradaul rtw时间表 
WOAC; Y; ​​GWHR; 08/11/2008; 08/13/2008; Gradaul Rtw时间表 
WMAC; Y; ​​GWHR; 06/11/2008; 06/17/2008;减少计划     
WMAC; Y; ​​GWHR; 06/18/2008; 06/25/2008;减少计划     


我需要输出
码:


WMAC; Y; ​​GWHR; 07/21/2008; 08/01/2008;逐步减少的工作时间
WOAC; Y; ​​GWHR; 08/05/2008; 08/08/2008; gradaul rtw时间表 
WMAC; Y; ​​GWHR; 06/11/2008; 06/25/2008;减少计划     



请帮助我。
回到顶部
查看用户资料 发送私信
钦南

新的用户


已加入:2006年10月18日
帖子:73

发布发表:2008年9月22日星期一7:34 pm
引用回复

行,

您的要求的完整步骤应如下所示。

码:


// S0001    EXEC PGM=SYNCTOOL                                           
// DFSMSG   DD SYSOUT=*                                               
// SYSPRINT DD SYSOUT = *                                               
// SYSOUT   DD SYSOUT=*                                               
//工具  DD SYSOUT=*                                               
// STATA    DD DSN=&&TEMP1,                                           
//            SPACE=(CYL,(10,10)),                                   
//            DISP=(NEW,PASS),DCB=(LRECL = 278,BLKSIZE = 2780)           
// DDIN     DD DISP = SHR,DSN = In.File                         
// DDOUT    DD SYSOUT=*                                               
//输出      DD SYSOUT=*                                               
// TOOLIN   DD *                                                       
  COPY FROM(DDIN) TO(STATA) USING(CTL1)                               
  SPLICE FROM(STATA) TO(OUT) ON(1,99,CH)            -                 
     ON(122,156,CH) WITH(111,10) KEEPNODUPS                           
// CTL1CNTL DD *                                                       
       SORT FIELDS=(1,99,CH,A,                                       
                    122,156,CH,A,                                     
                    106,04,ZD,A,                                     
                    100,02,ZD,A,                                     
                    103,02,ZD,A,                                     
                    117,02,ZD,A,                                     
                    111,02,ZD,A,                                     
                    114,02,ZD,A)                                     



它对我有用一些小的测试数据。所以尝试一下,如果您认为是问题,请告诉我
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月22日星期一7:48 pm
引用回复

你好

非常非常感谢你。

该代码工作正常。

确实是它的gr8与您合作。


再次感谢。
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


已加入:2006年10月17日
帖子:2481
位置:@我的办公桌

发布发表:2008年9月22日星期一8:52 pm
引用回复

您好,

我只是尝试使用上面的代码和下面的示例输入,并得到了预期的结果。
输入值
码:
--- + ---- 9 ---- + ---- 0 ---- + ---- 1 ---- + ---- 2 ---- + ---- 3- -
<---VALUE1     -->2008年7月21日; 2008年7月25日<--- value2--
<---VALUE1     -->07/28/2008; 08/01/2008<--- value2--
<---VALUE3     -->2008年7月21日; 2008年7月25日<--- value3--
<---VALUE3     -->07/28/2008; 08/01/2008<--- value3--
<---VALUE3     -->07/28/2008; 08/05/2008<--- value3--
<---VALUE3     -->2008年7月29日; 2008年8月4日<--- value3--
实际产量
码:
--- + ---- 9 ---- + ---- 0 ---- + ---- 1 ---- + ---- 2 ---- + ---- 3- -
<---VALUE1     -->2008年7月21日; 2008年8月1日<--- value2--
<---VALUE3     -->07/21/2008; 08/04/2008<--- value3--

预期产量
码:
--- + ---- 9 ---- + ---- 0 ---- + ---- 1 ---- + ---- 2 ---- + ---- 3- -
<---VALUE1     -->2008年7月21日; 2008年8月1日<--- value2--
<---VALUE3     -->2008年7月21日; 2008年8月5日<--- value3--

我不确定您是否遇到过这样的输入。无论如何,这是SYNCTOOL作业,也应适用于上述输入。
码:
//步骤1    EXEC PGM=SYNCTOOL                                   
// DFSMSG   DD SYSOUT=*                                         
//工具  DD SYSOUT=*                                         
//在       DD DSN=Input.file ---------- FB,LRECL = 400         
//输出     DD DSN = Output.file ---------- FB,LRECL = 400         
// T1       DD DSN=&&T1,DISP=(MOD,PASS)                         
// TOOLIN   DD *                                                 
 SORT FROM(IN) TO(T1) USING(CTL1)                               
 SORT FROM(IN) TO(T1) USING(CTL2)                               
 SPLICE FROM(T1) TO(OUT) ON(1,99,CH) ON(201,200,CH) WITH(111,10)
// CTL1CNTL DD *                                                 
   INREC OVERLAY=(401:106,4,100,2,103,2)                       
   SORT FIELDS=(1,99,CH,D,201,200,CH,D,401,8,CH,D)             
   彻底删除,结点,已建立=(1,400),                     
   SECTIONS=(1,99,201,200,TRAILER3 =(1,200,201,200))             
// CTL2CNTL DD *                                                 
   INREC OVERLAY=(401:117,4,111,2,114,2)                       
   SORT FIELDS=(1,99,CH,D,201,200,CH,D,401,8,CH,A)             
   彻底删除,结点,已建立=(1,400),                     
   SECTIONS=(1,99,201,200,TRAILER3 =(1,200,201,200))       

谢谢,
阿伦
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


已加入:2006年10月17日
帖子:2481
位置:@我的办公桌

发布发表:2008年9月22日星期一9:28 pm
引用回复

你好

不便之处,敬请原谅,
请忽略我以前的文章中的jcl,并按以下方式阅读。某些文件位置错误 icon_mad.gif .
码:
// TOOLIN   DD *                                                 
 SORT FROM(IN) TO(T1) USING(CTL1)                               
 SORT FROM(IN) TO(T1) USING(CTL2)                               
 SPLICE FROM(T1) TO(OUT) ON(1,99,CH) ON(121,280,CH) WITH(111,10)
// CTL1CNTL DD *                                                 
   INREC OVERLAY=(401:106,4,100,2,103,2)                       
   SORT FIELDS=(1,99,CH,D,121,280,CH,D,401,8,CH,D)             
   彻底删除,结点,已建立=(1,400),                     
   SECTIONS=(1,99,121,80,201,200,TRAILER3 =(1,200,201,200))     
// CTL2CNTL DD *                                                 
   INREC OVERLAY=(401:117,4,111,2,114,2)                       
   SORT FIELDS=(1,99,CH,D,121,280,CH,D,401,8,CH,A)             
   彻底删除,结点,已建立=(1,400),                     
   SECTIONS=(1,99,121,80,201,200,TRAILER3 =(1,200,201,200)) 

谢谢,
阿伦
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月23日,星期二,上午10:08
引用回复

嗨,阿伦

感谢您对此的关注。


真的很有帮助。
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


已加入:2006年10月17日
帖子:2481
位置:@我的办公桌

发布发表:2008年9月23日,星期二,12:49 pm
引用回复

西瓦
引用:
感谢您对此的关注

别客气。 icon_smile.gif

谢谢,
阿伦
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:星期五九月26,2008 10:56上午
引用回复

大家好,

感谢您的所有答复。
但是对于此组合记录,我只能再面对两种无法继续进行的情况。

请帮助我。

对于上面的示例,如果条件如下所示,我需要执行以下操作:
例如:-


码:
开始日期        End Date
                           01/11/2008
2008年8月28日           10/09/2008


上面的Sort给出了类似的输出
码:
开始日期       End Date
                      10/09/2008


但我需要它

码:
开始日期       End Date
2008年8月28日           10/09/2008


结束日期也一样。

有人可以帮我吗?
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


已加入:2006年10月17日
帖子:2481
位置:@我的办公桌

发布发表:星期五九月26,2008 11:42上午
引用回复

西瓦

如下修改我上一篇文章中的CTL1 / CTL2卡。
码:
// CTL1CNTL DD *                                                     
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(401:8C'9')),                     
    IFTHEN=(WHEN=(100,10,CH,NE,C' '),OVERLAY=(401:106,4,100,2,103,2))
  SORT FIELDS=(1,99,CH,D,121,280,CH,D,401,8,CH,D)                   
 彻底删除,结点,已建立=(1,400),                           
  SECTIONS=(1,99,121,80,201,200,TRAILER3 =(1,200,201,200))           
// CTL2CNTL DD *                                                     
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(401:8C'0')),                     
    IFTHEN=(WHEN=(111,10,CH,NE,C' '),OVERLAY=(401:117,4,111,2,114,2))
  SORT FIELDS=(1,99,CH,D,121,280,CH,D,401,8,CH,A)                   
 彻底删除,结点,已建立=(1,400),                           
  SECTIONS=(1,99,121,80,201,200,TRAILER3 =(1,200,201,200))           
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:星期五九月26,2008 11:52上午
引用回复

嗨,阿伦

感谢您的回复。

实际上,我的输入文件长度已全部更改,这次LRECL达到700。所以我将值替换为正确的值。像下面

码:

// TOOLIN   DD *                                                     
     SORT FROM(IN) TO(T1) USING(CTL1)                               
     SORT FROM(IN) TO(T1) USING(CTL2)                               
     SPLICE FROM(T1) TO(OUT) ON(1,421,CH) ON(444,256,CH) WITH(433,10)
// CTL1CNTL DD *                                                     
   INREC OVERLAY=(428,4,422,2,425,2)                                 
   SORT FIELDS=(1,421,CH,D,444,256,CH,D)                             
   彻底删除,结点,已建立=(1,700),                           
// CTL2CNTL DD *                                                     
   INREC OVERLAY=(439,4,433,2,436,2)                                 
   SORT FIELDS=(1,421,CH,D,444,256,CH,D)                             
   彻底删除,结点,已建立=(1,700) 
                         


但是我在输出文件中什么也没得到。

您能告诉我您如何定义截面部分,以及输入文件的LRECL是否为400,而您使用 401:,不是中止吗????
就我而言,它弯曲了...

请帮我 ???
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月26日,星期五12:09 pm
引用回复

嗨,阿伦

我已经用以前的记录长度i运行过您的排序卡。 400

我得到空输出,意味着输出中没有值。

您能否检查一下并让我知道。

谢谢你的帮助。
回到顶部
查看用户资料 发送私信
外籍人士

全球主持人


已加入:2007年3月14日
帖子:8794
地点:威尔士威尔士

发布发表:2008年9月26日,星期五12:19 pm
引用回复

引用:
您能否检查一下并让我知道。


西瓦你呢 检查一下并发布您尝试过的内容以及由此产生的错误。我确信阿伦不会因为花太多时间解决而获得报酬 您的 problems.
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


已加入:2006年10月17日
帖子:2481
位置:@我的办公桌

发布发表:2008年9月26日,星期五12:22 pm
引用回复

引用:
实际上,我的输入文件长度已全部更改,这次LRECL达到700

我输入的jcl输入400的LRECL和您提供的日期位置对我来说很好用。相同的jcl可能不适用于所有输入的LRECL。如果没有给出结果,则需要发布使用的jcl。
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月26日,星期五12:24 pm
引用回复

嗨,外籍人士,

请不要继续我的话。

我的意思是说我在准备该排序卡时遇到问题。阿伦真的从一开始就在帮助我。

他给了我很多解决方案...我只是仔细检查了一下代码,却得到了空输出。我尽我最大的努力来找到原因,但找不到原因。所以要求阿伦请检查wts的概率?

请问有什么问题吗?

此外 抱歉 如果那伤害了你很多。
回到顶部
查看用户资料 发送私信
外籍人士

全球主持人


已加入:2007年3月14日
帖子:8794
地点:威尔士威尔士

发布发表:星期五九月26,2008 12:44下午
引用回复

西瓦

已通过PM回复 icon_lol.gif
回到顶部
查看用户资料 发送私信
siva102

新的用户


已加入:2007年11月28日
帖子:63
地点:钦奈

发布发表:2008年9月26日,星期五12:58 pm
引用回复

嗨,阿伦,

感谢回复。我和外国人之间有些误会。

请在下面找到JCl,
码:

//步     EXEC PGM=SYNCTOOL                                         
// DFSMSG   DD SYSOUT=*                                               
//工具  DD SYSOUT=*                                               
//在       DD DSN=Input File    - length = 400
//输出      DD DSN=OUTput File    - length = 400
// T1       DD DSN=&&T1,DISP=(MOD,PASS)                               
// TOOLIN   DD *                                                       
  SORT FROM(IN) TO(T1) USING(CTL1)                                   
   SORT FROM(IN) TO(T1) USING(CTL2)                                   
   SPLICE FROM(T1) TO(OUT) ON(1,99,CH) ON(201,200,CH) WITH(111,10)   
// CTL1CNTL DD *                                                       
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(401:8C'9')),                       
    IFTHEN=(WHEN=(100,10,CH,NE,C' '),OVERLAY=(401:106,4,100,2,103,2))
  SORT FIELDS=(1,99,CH,D,121,280,CH,D,401,8,CH,D)                     
   彻底删除,结点,已建立=(1,400),                             
   SECTIONS=(1,99,121,80,201,200,TRAILER3 =(1,200,201,200))             
 //CTL2CNTL DD *                                                       
   INREC IFTHEN=(WHEN=INIT,OVERLAY=(401:8C'0')),                       
     IFTHEN=(WHEN=(111,10,CH,NE,C' '),OVERLAY=(401:117,4,111,2,114,2))
   SORT FIELDS=(1,99,CH,D,121,280,CH,D,401,8,CH,A)                     
   彻底删除,结点,已建立=(1,400),                             
   SECTIONS=(1,99,121,80,201,200,TRAILER3 =(1,200,201,200))             
 /*                                         
                         



我得到的错误是
码:

IN       : RECFM=FB   ; LRECL=   400; BLKSIZE= 27600
记录长度=   408                         
可能无法有效使用INREC                 


我们一直在使用的Bcos 叠加=(401:8C'9')).

您能否建议任何其他技巧来获得输出。
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


已加入:2006年10月17日
帖子:2481
位置:@我的办公桌

发布发表:2008年9月26日,星期五1:34 pm
引用回复

西瓦

您遇到的错误不是严重错误,而是 您认为空输出的原因。

您已将SPLICE语句编码为
引用:
来自(T1) TO(OUT) ON(1,99,CH) ON(201,200,CH)WITH(111,10)
instead of
引用:
来自(T1) TO(OUT) ON(1,99,CH) ON(121,280,CH)WITH(111,10)
更正此问题并重新运行您的工作
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> JCL& VSAM 转到页面 1, 2  下一页

 


类似主题
话题 论坛 回覆
该主题已锁定:您无法编辑帖子或回复。 将匹配的记录写入输出文件 DFSORT / ICETOOL 11
没有新帖 比较文件记录计数百分比... DFSORT / ICETOOL 4
没有新帖 RECFM = U磁带文件的记录数 DFSORT / ICETOOL 17
没有新帖 检查内部总计数... JCL& VSAM 5
该主题已锁定:您无法编辑帖子或回复。 将JCL连接到DD站点的一个记录中... 同步排序 2
搜索我们的论坛:


回到顶部