从文件中读取记录

时间:2010-06-10 07:12:49

标签: jcl

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

任何人都可以告诉如何使用sort,icetool等编写jcl。

2 个答案:

答案 0 :(得分:1)

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

这是将第一个和最后10个记录复制到另一个文件的JCL。我假设每个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 :(得分: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月。