1

我想从包含 38,792 条记录的测试文件中删除基于 5 个字符活动代码的 501 条记录。

由于有 501 条记录,我不能写省略条件。

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

那么我能做什么呢?

4

1 回答 1

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 语句中的 ONLY ,只有一个可能) .

在匹配的那些中,您想忽略第一个 501。因此,设置一个仅针对匹配记录递增的序列号。

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

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

于 2014-08-10T14:31:34.910 回答