下面的JCL應該選擇每個記錄的第一個副本,由於「選項副本」並且僅在第4字節長度爲7的「NETWORK」下保持相同順序,以及''在字節59長度爲1,在字節不包括在字節3長度5和「GRAND」與「總計」記錄3長度5.DFSORT在僅查找第一個副本時選擇重複項
它示出了具有「網絡」的任何記錄在字節4長度7
//SORT EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DISP=SHR,DSN=INPUT.FILE
//T1 DD DSN=&&T1,DISP=(MOD,PASS),SPACE=(TRK,(5,5))
//OUT DD SYSOUT=*
//OUTFIL DD SYSOUT=*
//TOOLIN DD *
* DROP EVERYTHING WE DON'T WANT
SELECT FROM(IN) TO(OUT) ON(1,134,CH) USING(CTL1) FIRST
/*
//CTL1CNTL DD *
OPTION COPY
INCLUDE COND=((4,7,CH,EQ,C'NETWORK',OR,
59,1,CH,EQ,C'.'),AND,
(3,5,CH,NE,C'TOTAL',AND,
3,5,CH,NE,C'GRAND'))
/*
如果我在第4字節長度爲7時只更改了'NETWORK'的條件,它只顯示1條記錄,這正是我所期望的。輸入每次都是一樣的。
//CTL1CNTL DD *
OPTION COPY
INCLUDE COND=((4,7,CH,EQ,C'NETWORK'))
/*
我想不出有什麼區別,導致其他條件來改變它,所以它具有重複
的評論2表明,這個問題是與包括條件。
我已經嘗試了下面的內容,第一個選擇是在做我正在做的原創,第二個SELECT沒有包含條件,因爲它們已經發生在第一個選擇中。目前還有複製與網絡記錄的字節長度爲4 7.用網絡記錄的其餘部分是完全相同的,所以應該只有1
//TOOLIN DD *
* DROP EVERYTHING WE DON'T WANT
SELECT FROM(IN) TO(T1) ON(1,133,CH) USING(CTL1) FIRST
SELECT FROM(T1) TO(OUT) ON(1,133,CH) USING(CTL2) FIRST
/*
//CTL1CNTL DD *
OPTION COPY
INCLUDE COND=((4,7,CH,EQ,C'NETWORK',OR,
59,1,CH,EQ,C'.'),AND,
(3,5,CH,NE,C'TOTAL',AND,
3,5,CH,NE,C'GRAND'))
/*
//CTL2CNTL DD *
OPTION COPY
/*
你的問題是與包括條件或ICETOOL選擇? 對於你的描述,你可能有太多的記錄,因爲它落在第一個OR條件。 – user823959 2012-02-10 18:33:41
重新檢查你的AND和OR和括號,以確保它正在做你想做的事。請記住,電腦是世界上最愚蠢的東西;它完全符合你的要求。 :) 此外,我不知道// SORTDIAG DD DUMMY語句是否會在這裏幫助,但你永遠不知道;我會在那裏扔一個,看看額外的消息。 – zarchasmpgmr 2012-02-10 22:32:32