2010-06-10 117 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月包括在內。