使用jcl排序卡删除大文件中的选定记录数

时间:2014-08-07 06:09:35

标签: jcl dfsort

我想根据测试文件中的5个字符活动代码删除501条记录,记录为38,792条。

由于有501条记录我无法写出省略条件。

我需要使用排序连接卡,但我的prombelem是这个5字符活动代码从第46列开始为某些记录而第47列从其他人开始。

那我该怎么办?

1 个答案:

答案 0 :(得分:0)

问题尚不清楚,遗漏了许多细节,但这可能有助于另一位搜索者:

 //SYSIN DD *

  JOINKEYS F1=INA,FIELDS=(1,5,A),SORTED,NOSEQCK
  JOINKEYS F2=INB,FIELDS=(1,5,A) 

  JOIN UNPAIRED,F1 

  REFORMAT FIELDS=(F1:1,80,?) 

  OPTION COPY 

  INREC IFTHEN=(WHEN=(81,1,CH,EQ,C'B'), 
                OVERLAY=(82:SEQNUM,9,ZD)) 

  OUTFIL OMIT=(82,9,CH,LE,C'000000501', 
              AND, 
               81,1,CH,EQ,C'B') 

//JNF2CNTL DD * 
  INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'0'), 
                BUILD=(3,5)), 
        IFTHEN=(WHEN=NONE, 
                BUILD=(2,5)) 
//INA      DD * 
11111 IN 
22222 KEEP UNMATCHED 
33333 OUT 
66666 IN 
66667 KEEP UNMATCHED 
66668 KEEP UNMATCHED 
77777 OUT 
88888 SHAKE IT ALL ABOUT 
//INB      DD * 
0X11111 
0X66666 
0X88888 
133333 
799999 
877777 

这是使用两个输入文件,INA和INB。

INA已经按顺序排列(因此在JOINKEYS上为它指定SORTED,NOSEQCHK),并且是固定长度的80字节记录。

INB尚未按顺序排列,因为它是不同文件的混合,都是固定长度的80字节记录。

在JNF2CNTL中,仅提取第二个文件中的密钥,因为该文件不需要其他数据。密钥源自不同的地方,具体取决于记录类型。在JOIN本身之前,文件将自动排序(设置OPTION EQUALS)。

JOIN用于匹配,以及来自F1(INA)的不匹配记录。

?在REFORMAT语句中是"匹配标记"对于来自F1的不匹配记录,它将自动设置为B(两者)进行匹配,并且1(在这种情况下,由于JOIN语句中只有一个是可能的)。

在匹配的那些中,你想忽略前501.所以,设置一个序列号,只对匹配的记录增加。

然后在OUTFIL上,OMIT =用于那些序列小于或等于501计数的匹配记录。

SORTOUT上的输出将是INA文件中的所有记录,但匹配的第一个501除外。