查看上一个主题 :: 查看下一个主题
|
作者 |
信息 |
安巴拉姆
新的用户
已加入:2018年8月19日 帖子:5 地点:印度
|
|
|
|
大家好,
我有两个长度为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 地点:威尔士威尔士
|
|
|
|
您是否需要在OUT1的最后一条语句上使用逗号。
码: |
IFTHEN=(WHEN=(501,1,CH,EQ,C'1'),
也许应该是
IFTHEN=(WHEN=(501,1,CH,EQ,C'1')
|
|
|
回到顶部 |
|
 |
安巴拉姆
新的用户
已加入:2018年8月19日 帖子:5 地点:印度
|
|
|
|
嗨,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 地点:印度
|
|
|
|
我也尝试了以下方法。
码: |
//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 所在地:爱尔兰都柏林
|
|
|
|
我认为您的括号放错了位置。你想覆盖&构建“ 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中记录的第一个字节重叠。这是您想要的吗?或者应该是:
加油 |
|
回到顶部 |
|
 |
安巴拉姆
新的用户
已加入:2018年8月19日 帖子:5 地点:印度
|
|
|
|
嗨,加里,
我得到了overlay的预期结果,即文件F1的第50位与文件F2的第50位完美更新。 ,以及我的第一个JCL。唯一的问题是,当我尝试为F1编写不匹配的记录时,出现错误。
REFORMAT FIELDS =(F1:1,500,?,F2:50,1)可以。 |
|
回到顶部 |
|
 |
尼克·克劳斯顿
全球主持人
加入时间:2007年5月10日 帖子:2455 地点:英国汉普郡
|
|
|
|
我相信您的JCL运行正常。这是你的排序 控制声明 你有问题。 JCL和程序控制语句不是同一件事。 |
|
回到顶部 |
|
 |
加里·卡罗尔
高级会员
加入时间:2006年5月8日 职位:1100 所在地:爱尔兰都柏林
|
|
|
|
我误读了REFORMAT语句 v
但是,我建议将IFTHEN的最后一个右括号从OVERLAY之后移到BUILD之后,然后继续到下一个IFTHEN,后者将省略OVERLAY,并在一个单独的BUILD之后加上右括号。
加油 |
|
回到顶部 |
|
 |
谢尔盖肯
活跃的成员

已加入:2008年4月29日 职位:941 所在地:马里兰
|
|
|
|
在您的第一个IFTHEN =组中,子参数BUILD =和OVERLAY =是互斥的。
您需要检查参数的逻辑。
附言
如果适当地对齐代码(使用逻辑缩进)并按行划分参数,则可能更容易发现类似的问题,包括括号放置不正确。
除了标准的一个,这是一个额外的建议: 在您的问题中始终使用代码标签. |
|
回到顶部 |
|
 |
阿伦·拉吉(Arun Raj)
主持人
已加入:2006年10月17日 帖子:2481 位置:@我的办公桌
|
|
|
|
正如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 地点:印度
|
|
|
|
谢谢阿伦!这正是我所需要的。
抱歉耽搁了 。我正在休假一个星期。
谢谢Garry,Nic和Sergeyken。 |
|
回到顶部 |
|
 |
阿伦·拉吉(Arun Raj)
主持人
已加入:2006年10月17日 帖子:2481 位置:@我的办公桌
|
|
|
|
安巴拉姆写道: |
谢谢阿伦!这正是我所需要的。
抱歉耽搁了 。我正在休假一个星期。
谢谢Garry,Nic和Sergeyken。 |
别客气。感谢更新! |
|
回到顶部 |
|
 |
|
 |
查看书签
所有时间均为格林尼治标准时间+ 6小时 |
|