2010-06-10 87 views
1

我有一个文件有一定数量的记录,我想只将第一个和最后10个记录复制到另一个文件中。从文件读取记录

可有人告诉怎么写JCL,使用排序,icetool等

回答

1

您可以使用ICETOOL复制你的输入文件的一个子集。

以下是JCL将第一个和最后10个记录复制到另一个文件。我假设每个80字节的固定长度记录。

您还必须更改JOB卡以符合您的大型机商店的要求。

//EXAMP JOB A400,PROGRAMMER 
//STEP1 EXEC PGM=ICETOOL 
//SYSOUT DD SYSOUT=* 
//SORTIN DD DSN=INPUT,DISP=SHR 
//T1  DD DSN=&&T1,DISP=(,PASS),UNIT=VIO 
//T2  DD DSN=&&T2,DISP=(,PASS),UNIT=VIO 
//T3  DD DSN=&&T3,DISP=(,PASS),UNIT=VIO 
//SORTOUT DD DSN=OUTPUT,DISP=(NEW,CATLG),UNIT=SYSDA, 
//   SPACE=(CYL,(5,1)) 
//SYSIN DD * 
    COPY FROM(IN) USING(CTL1)          
    COPY FROM(T1) USING(CTL2)          
    COPY FROM(T1) USING(CTL3) 
    COPY FROM(T2,T3) USING(CTL4) 
/* 
//CTL1CNTL DD * 
    OUTFIL FNAMES=T1,OUTREC=(1,80,SEQNUM,8,ZD) 
/* 
//CTL2CNTL DD * 
    OUTFIL FNAMES=T2,ENDREC=10 
/* 
//CTL3CNTL DD * 
    SORT FIELDS=(81,8,BI,D)          
    OUTFIL FNAMES=T3,ENDREC=10 
/* 
//CTL4CNTL DD * 
    SORT FIELDS=(81,8,BI,A)          
    OUTFIL FNAMES=SORTOUT,OUTREC=(1,80) 
// 

第一组控制卡(CTL1CNTL)增加了一个序列号来输入记录。

第二组控制卡(CTL2CNTL)获取前10个输入记录。

第三组控制卡(CTL3CNTL)按相反顺序对输入记录进行排序,并获取前10个记录(最后10个记录)。

第四套控制卡(CTL4CNTL)按照正确的顺序对提取的记录进行排序,并删除第一套控制卡添加的序列号。

有关更多信息,请参阅IBM的DFSORT Application Programming Guide

+1

你应该在这里添加更多的解释。假设输入记录每个都是80个字节。您给给T1的文件添加一个序列号。抓住T2的前10条记录。使用序列号将T1排序为相反顺序。抓住T1的第一条(最后一条)10条记录给T3。合并T2和T3,对给出OUTPUT的序列号进行分类和丢弃。最终结果是原始输入的第一个和最后10个记录现在在OUTPUT中。没有这种解释,初学者可能很难弄清楚你在做什么。虽然整洁的解决方案! – NealB 2010-06-15 16:00:40

+0

@NealB:谢谢。我添加了解释。我实际上假设输入记录是80字节,但在提交答案之前将其删除。 – 2010-06-15 19:47:59

0

从2008年7月开始,ICETOOL拥有SUBSET。

//STEP1 EXEC PGM=ICETOOL 
//SYSOUT DD SYSOUT=* 
//IN  DD DSN=your input 
//OUT  DD DSN=your output 
//SYSIN DD * 
    SUBSET FROM(IN) TO(OUT) KEEP INPUT FIRST(10) LAST(10) 

要知道您是否有2008年7月份可用,请在任何排序步骤中查看ICE201I消息。

ICE201I F RECORD TYPE ... 

信件号后面的字母是F或更大,那么你有2008年7月包括在内。