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

Joinkey覆盖且与Outfil不匹配


IBM大型机论坛 -> DFSORT / ICETOOL
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
安巴拉姆

新的用户


已加入:2018年8月19日
帖子:5
地点:印度

发布发表于:星期四八月23,2018 11:57上午
引用回复

大家好,

我有两个长度为500且结构相同的文件。我正在比较文件并使用F2的第50个位置更新值来更新第一个文件(F1)。我正在使用低于JCL来更新我的第一个文件,并且工作正常。
码:

 // SORTJNF1 DD DSN = FILE1,                               
 //            DISP=SHR                                 
 // SORTJNF2 DD DSN = FILE2,                               
 //            DISP=SHR                                 
 //SORTOUT  DD DSN=FILE1UPD,                           
 //            DISP=(,CATLG,DELETE),                   
 //            SPACE=(500,(30,20)),AVGREC=K,           
 //            LRECL=500,RECFM=FB                       
 //SYSIN    DD    *                                     
   JOINKEYS FILES = F1,FIELDS =(1,10,A,65,5,A,)           
   JOINKEYS FILES = F2,FIELDS =(1,10,A,65,5,A,)           
   JOIN UNPAIRED,F1                                     
   REFORMAT FIELDS=(F1:1,500,?,F2:50,1)                 
   OPTION COPY                                         
   OUTFIL IFOUTLEN=500,                                 
     IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),OVERLAY=(50:502,1))


现在我还想创建一个文件,该文件的第一个文件(F1)中的记录不匹配。因此,我对JCL进行了如下修改。
码:

 // SORTJNF1 DD DSN = FILE1                                   
 //            DISP=SHR                                   
 // SORTJNF2 DD DSN = FILE2                                   
 //            DISP=SHR                                   
 //OUT1     DD DSN=FILE1UP                                 
 //            DISP=(,CATLG,DELETE),                       
 //            SPACE=(600,(30,20)),AVGREC=K,               
 //            LRECL=500,RECFM=FB                         
 //OUT2     DD DSN = FILE1.NOMATCH,                         
 //            DISP=(,CATLG,DELETE),                       
 //            SPACE=(600,(30,20)),AVGREC=K,               
 //            LRECL=500,RECFM=FB                         
 //SYSIN    DD    *                                       
   JOINKEYS FILES = F1,FIELDS =(1,19,A,65,5,A,)               
   JOINKEYS FILES = F2,FIELDS =(1,19,A,65,5,A,)               
   JOIN UNPAIRED,F1                                       
   REFORMAT FIELDS=(F1:1,500,?,F2:50,1)                   
   OPTION COPY                                             
     (501,1,CH,EQ,C'B'),       
       IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),OVERLAY=(50:502,1)),
       BUILD=(1,600)             
      IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),   
   OUTFIL FNAMES = OUT2,SAVE,BUILD =(1,500),                 

但是我面临下面的错误
码:

ICE214A F重复,冲突或遗漏了失实陈述运营商 
                IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),                       
                $                                                       
ICE005A 0第1列中需要空白,或者操作未正确定义   
             OUTFIL FNAMES = OUT2,SAVE,BUILD =(1,500),         

您能否让我知道如何纠正错误并在同一步骤中创建不匹配的文件。

请学习使用代码标签,使内容更易于阅读。它们易于使用

码:
[code]
你的东西在这里
[/code]

回到顶部
查看用户资料 发送私信
外籍人士

全球主持人


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

发布发表于:星期四八月23,2018 12:22下午
引用回复

您是否需要在OUT1的最后一条语句上使用逗号。
码:

      IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),   

也许应该是

      IFTHEN=(WHEN=(501,1,CH,EQ,C'1')
回到顶部
查看用户资料 发送私信
安巴拉姆

新的用户


已加入:2018年8月19日
帖子:5
地点:印度

发布发表于:星期四八月23,2018 12:59下午
引用回复

嗨,EXPACT,

谢谢你的建议 。我试过不带逗号,结果只是一样。


码:


// SYSIN    DD    *                                       
 JOINKEYS FILES = F1,FIELDS =(1,19,A,65,5,A,)       
 JOINKEYS FILES = F2,FIELDS =(1,19,A,65,5,A,)       
  JOIN UNPAIRED,F1                                       
  REFORMAT FIELDS=(F1:1,500,?,F2:50,1)                   
  OPTION COPY                                             
   (501,1,CH,EQ,C'B'),       
      IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),OVERLAY=(50:502,1)),
      BUILD=(1,500)                                       
      IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),                   
   OUTFIL FNAMES = OUT2,SAVE,BUILD =(1,500)                 
/*                                                       


码:

     (601,1,CH,EQ,C'B'),           
       IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),OVERLAY=(50:502,1)),   
       BUILD=(1,500)                                           
       $                                                       
 重复,冲突或遗漏了不完整的声明操作 
       IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),                       
       $                                                       
 第1列中需要空白,或操作未正确定义   
     OUTFIL FNAMES = OUT2,SAVE,BUILD =(1,500)                     


实际上,我也尝试了语法的其他组合。但是结果似乎是一样的。我们可以在build中使用overlay吗?如果没有,我们该怎么用呢?
回到顶部
查看用户资料 发送私信
安巴拉姆

新的用户


已加入:2018年8月19日
帖子:5
地点:印度

发布发表于:星期四八月23,2018 1:17下午
引用回复

我也尝试了以下方法。



码:

 //SYSIN    DD    *                                       
   JOINKEYS FILES = F1,FIELDS =(1,10,A,65,5,A)       
   JOINKEYS FILES = F2,FIELDS =(1,10,A,65,5,A)       
   JOIN UNPAIRED,F1                                       
   REFORMAT FIELDS=(F1:1,500,?,F2:50,1)                   
   OPTION COPY                                             
     (501,1,CH,EQ,C'B'),       
       IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),OVERLAY=(50:502,1)),
       BUILD=(1,500)                                       
     OUTFIL FNAMES=OUT2,       

      IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),                   
       BUILD=(1,500)                                       
 /*                                                       


输出是

码:

     (501,1,CH,EQ,C'B'),           
       IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),OVERLAY=(50:502,1)),   
       BUILD=(1,500)                                         
       $                                                     
 重复,冲突或遗漏了不完整的声明操作
     OUTFIL FNAMES=OUT2,                                     
       IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),                       
       BUILD=(1,500)                             
             
回到顶部
查看用户资料 发送私信
加里·卡罗尔

高级会员


加入时间:2006年5月8日
职位:1100
所在地:爱尔兰都柏林

发布发表于:星期四八月23,2018 2:01下午
引用回复

我认为您的括号放错了位置。你想覆盖&构建“ B”的情况,并分别选择“ 1”的记录。然后将所有其他记录保存到SAVE输出。

例如
码:
   (501,1,CH,EQ,C'B'),         
      IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),OVERLAY=(50:502,1), 
      BUILD=(1,500)),                                     
     IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),                     
      BUILD=(1,500))                                       
   OUTFIL FNAMES = OUT2,SAVE,BUILD =(1,500)                   


你说:
引用:
我正在比较文件并使用F2的第50个位置更新值来更新第一个文件(F1)。


您所拥有的是将文件1中记录的字节50与文件2中记录的第一个字节重叠。这是您想要的吗?或者应该是:
码:
  OVERLAY=(50:552,1) 


加油
回到顶部
查看用户资料 发送私信
安巴拉姆

新的用户


已加入:2018年8月19日
帖子:5
地点:印度

发布发表于:星期四八月23,2018 2:24下午
引用回复

嗨,加里,

我得到了overlay的预期结果,即文件F1的第50位与文件F2的第50位完美更新。 ,以及我的第一个JCL。唯一的问题是,当我尝试为F1编写不匹配的记录时,出现错误。

REFORMAT FIELDS =(F1:1,500,?,F2:50,1)可以。
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:星期四八月23,2018 2:54下午
引用回复

我相信您的JCL运行正常。这是你的排序 控制声明 你有问题。 JCL和程序控制语句不是同一件事。
回到顶部
查看用户资料 发送私信
加里·卡罗尔

高级会员


加入时间:2006年5月8日
职位:1100
所在地:爱尔兰都柏林

发布发表于:星期四八月23,2018 3:39下午
引用回复

我误读了REFORMAT语句 icon_redface.gif v

但是,我建议将IFTHEN的最后一个右括号从OVERLAY之后移到BUILD之后,然后继续到下一个IFTHEN,后者将省略OVERLAY,并在一个单独的BUILD之后加上右括​​号。

加油
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
职位:941
所在地:马里兰

发布发表于:星期四八月23,2018 5:09下午
引用回复

在您的第一个IFTHEN =组中,子参数BUILD =和OVERLAY =是互斥的。

您需要检查参数的逻辑。

附言
如果适当地对齐代码(使用逻辑缩进)并按行划分参数,则可能更容易发现类似的问题,包括括号放置不正确。
除了标准的一个,这是一个额外的建议: 在您的问题中始终使用代码标签.
回到顶部
查看用户资料 发送私信
阿伦·拉吉(Arun Raj)

主持人


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

发布发表于:星期四八月23,2018 9:52下午
引用回复

正如sergeyken所指出的那样,您最初的问题是在同一OUTFIL中有BUILD和OVERLAY,您不能同时拥有这两者,而您只能拥有其中之一。

引用:
我也想从第一个文件(F1)创建一个具有不匹配记录的文件
由此看来,您正在尝试创建2个输出
OUT1-将F1中所有带有pos-50的记录替换为F2中的匹配记录。
OUT2-仅来自F1的不匹配记录。

如果这是您想要的,则可以将OUT1 OUTFIL保持与您在第一篇文章中显示的相同,并添加另一个OUTFIL,例如(未测试)。
码:
   JOINKEYS FILES = F1,FIELDS =(1,10,A,65,5,A,)           
   JOINKEYS FILES = F2,FIELDS =(1,10,A,65,5,A,)           
    JOIN UNPAIRED,F1                                     
    REFORMAT FIELDS=(F1:1,500,?,F2:50,1)                 
    OPTION COPY                                         
    OUTFIL FNAMES=OUT1,
           IFOUTLEN=500,                                 
           IFTHEN=(WHEN=(501,1,CH,EQ,C'B'),
           OVERLAY=(50:502,1))
    OUTFIL FNAMES=OUT2,
           INCLUDE=(501,1,CH,EQ,C'1'),
           BUILD=(1,500)
但是,您以后的帖子显示您仅将匹配的记录包括到OUT1中,如果您要这样做,则可以在OUT1 OUTFIL中添加INCLUDE以仅提取“ B”记录。

IFOUTLEN将帮助限制您的最终记录长度-如果您正尝试使用额外的BUILD。您将其放在原始控制卡中,但看起来像在“修改过的”控制卡中遗漏了它。
回到顶部
查看用户资料 发送私信
安巴拉姆

新的用户


已加入:2018年8月19日
帖子:5
地点:印度

发布发表于:星期四八月30,2018 2:59下午
引用回复

谢谢阿伦!这正是我所需要的。


抱歉耽搁了 。我正在休假一个星期。

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

主持人


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

发布发表于:星期四八月30,2018 8:47下午
引用回复

安巴拉姆写道:
谢谢阿伦!这正是我所需要的。


抱歉耽搁了 。我正在休假一个星期。

谢谢Garry,Nic和Sergeyken。
别客气。感谢更新!
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> DFSORT / ICETOOL

 


类似主题
话题 论坛 回覆
没有新帖 我们如何在ICETOOL中模拟JOINKEYS DFSORT / ICETOOL 9
没有新帖 如何覆盖压缩的十进制值... DFSORT / ICETOOL 5
没有新帖 JOINKEYS匹配两个输入文件... DFSORT / ICETOOL 3
没有新帖 比较两个数据集并获得第一个... DFSORT / ICETOOL 7
没有新帖 如何在OUTFIL中从PARM附加数据 DFSORT / ICETOOL 17
搜索我们的论坛:


回到顶部