2011-03-03 63 views
3

我想將MF PS分成幾個數據集。 例如如果我有一個包含600個rec的數據集,我想把它分成6個文件,每個文件有100個記錄。有沒有可能使用JCL排序來做到這一點?jcl排序除大型機數據集

回答

4

下面的JCL使用DFSORT將DD SOTRIN平均分配到3個輸出DATASETS(OUT1,OUT2和OUT3)上,以跨越6個添加3個輸出DD語句並將它們添加到FNAMES語句中。

//SPLIT EXEC PGM=ICEMAN 
//SYSOUT DD SYSOUT=* 
//SORTIN DD DSN=Y897797.INPUT1,DISP=OLD 
//OUT1 DD DSN=Y897797.SPLIT1,DISP=(NEW,CATLG), 
// SPACE=(CYL,(5,5)),UNIT=SYSDA 
//OUT2 DD DSN=Y897797.SPLIT2,DISP=(NEW,CATLG), 
// SPACE=(CYL,(5,5)),UNIT=SYSDA 
//OUT3 DD DSN=Y897797.SPLIT3,DISP=(NEW,CATLG), 
// SPACE=(CYL,(5,5)),UNIT=SYSDA 
//SYSIN DD * 
SORT FIELDS=(21,5,FS,A) 
OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT 
/* 

排序字段=(21,5,FS,A)是你想怎麼排序sortint數據集,下面就是這個字段聲明意味着

21月初場進行排序
5長度場進行排序
FS浮動註冊(簽名數值)
甲升序

DFSORT Getting Started Manual
Smart DFSORT Tricks擁有大量ö ˚F有用的例子和幾個其他的方式來記錄拆分出來的數據集

+0

我試圖運行這個工作,它將記錄分成3個文件,但在這種情況下,1第一個文件寫入st rec,第二個文件寫入第二個文件,依此類推。你能否解釋一下SORT FIELDS =(21,5,FS,A)的意義?我試圖打開您提供的鏈接。但該鏈接中的PDF不能打開......你能幫忙嗎? – Saisha 2011-03-04 08:58:17

+0

我已經添加了FIELDS語句表示的內容。你想要什麼方式記錄分裂? – Deuian 2011-03-07 14:44:25

+0

我的輸入文件已經排序,我只是想分幾個文件。我使用了選項SORT FIELDS = COPY,它對我來說工作得很好。非常感謝您的解決方案。它節省了我使用SKIPREC和STOPAFTER的時間...... :)非常感謝:) – Saisha 2011-03-10 07:26:40

1
  • Deuian的排序卡將輸入文件到輸出文件同樣的。如果我們有3輸出文件例如總輸入記錄除以3將是每個輸入文件的記錄計數
  • 對於cos,我們可以指定基於應該發生分割的計數,如下所示。它隱式地將輸入文件分割成輸出文件10000個記錄。例如,我們在輸入文件中有40000條記錄,我們將它們分成3個輸出文件,然後我們將在輸出文件中獲得10000 + 10000/3條記錄。

OUTFIL FNAMES =(OUT1,OUT2,OUT3),SPLIT =

  • 在簡單地說,我們可以利用它,當我們沒有任何約束輸出記錄計數。當我們有任何這樣的標準,而拆分然後在下面的代碼可以幫助...

排序字段=拷貝
OUTFIL FILES = OUT1,ENDREC = 10000
OUTFIL FILES = 02,STARTREC = 10001 ,ENDREC = 20000 OUTFIL FILES = 03,STARTREC = 20001,ENDREC = 30000

  • 最後,如果我們有超過30000條記錄中輸入文件,我們沒有指定哪些d o對於那些記錄,所以SORT不會爲他們打擾。最後一個輸出文件僅包含10000條記錄。

希望我已經說清楚了。請進一步回答問題。

2

SPLIT只是SPLIT,你不能將它與一個數字相關聯。

SPLITBY = n將在指定的每個OUTFIL數據集之間「旋轉」n個記錄。 SPLIT與SPLITYBY = 1相同。

SPLIT1R = n只會執行一次「旋轉」(n條記錄將寫入第一個OUTFIL數據集,然後n寫入第二個OUTFIL並繼續如此,直到使用最終的OUTFIL數據集,這將包含任何剩餘的記錄輸入,無論有多少。

OUTFIL FILES = OUT1不permissable。

如果使用STATREC/ENDREC或包含/ OMIT,OUTFIL SAVE可以用來建立未寫入記錄文件任何其他的OUTFIL數據集