jcl sort для разделения набора данных мэйнфрейма

Я пытаюсь разделить MF PS на несколько наборов данных. например Если у меня есть набор данных, содержащий 600 записей, я хочу разделить его на 6 файлов по 100 записей в каждом. Можно ли это сделать с помощью сортировки JCL?


person Manasi    schedule 03.03.2011    source источник


Ответы (4)


В приведенном ниже JCL используется DFSORT для равномерного разделения DD SOTRIN на 3 выходных набора данных (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  
/*  

SORT FIELDS = (21,5, FS, A) - это то, как вы хотите отсортировать набор данных sortint, ниже показано, что означает этот оператор полей

21 начало поля для сортировки
5 Длина поля для сортировки
Плавающий знак FS (числовой знак)
По возрастанию

Начало работы с DFSORT Руководство
Умные приемы DFSORT содержит множество полезных примеров и несколько других способов выделить записи из набора данных

person Deuian    schedule 03.03.2011
comment
Я пытался запустить эту работу. Он разбивает записи на 3 файла. Но в этом случае 1-я запись записывается в 1-й файл .. 2-я во 2-й файл и так далее. Не могли бы вы объяснить мне значение SORT FIELDS = (21,5, FS, A)? Я попытался открыть предоставленную вами ссылку. Но PDF-файл по этой ссылке не открывается ... Не могли бы вы помочь? - person Manasi; 04.03.2011
comment
Я добавил, что означает заявление FIELDS. Каким образом вы хотите разделить записи? - person Deuian; 07.03.2011
comment
Мой входной файл уже отсортирован, я просто хотел разделить его на несколько файлов. Я использовал опцию СОРТИРОВАТЬ ПОЛЯ = КОПИРОВАТЬ, и у меня она отлично работает. Большое спасибо за ваше решение. Это сэкономило мне время на использование SKIPREC и STOPAFTER ... :) Большое спасибо :) - person Manasi; 10.03.2011

SPLIT - это просто SPLIT, вы не можете связать его с числом.

SPLITBY = n будет чередовать n записей между каждым указанным набором данных OUTFIL. SPLIT - это то же самое, что SPLITBY = 1.

SPLIT1R = n будет выполнять только одно вращение (n записей будет записано в первый набор данных OUTFIL, затем n во второй OUTFIL и будет продолжаться до тех пор, пока не будет использован последний набор данных OUTFIL, который будет содержать любые оставшиеся записи для ввода, независимо от того, как многие.

OUTFIL FILES = OUT1 не допускается. Это должно быть OUTFIL FNAMES = (OUT1, OUT2, OUT3), SPLIT.

ЕСЛИ используется STATREC / ENDREC или INCLUDE / OMIT, OUTFIL SAVE может использоваться для создания файла для записей, которые не записываются ни в один из других наборов данных OUTFIL.

person Bill Woodger    schedule 22.01.2013

  • КАРТА СОРТИРОВКИ Дойяна делит входной файл на выходной файл поровну. Если у нас есть 3 выходных файла, например, общее количество входных записей, разделенное на 3, будет количеством записей для каждого входного файла.
  • Of cos мы можем указать количество, основанное на том, какое разделение должно произойти, как показано ниже. Он неявно разбивает входной файл на выходные файлы по 10000 записей каждый. Скажем, например, у нас есть 40000 записей во входном файле, и мы разделяем их на 3 выходных файла, тогда мы получим 10000 + 10000/3 записей в выходном файле.

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

  • Короче говоря, мы можем использовать это, когда у нас нет ограничений на количество выходных записей. Когда у нас есть такие критерии при разделении, тогда поможет фрагмент кода ниже ...

СОРТИРОВАТЬ ПОЛЯ = КОПИРОВАТЬ
OUTFIL FILES = OUT1, ENDREC = 10000
OUTFIL FILES = 02, STARTREC = 10001, ENDREC = 20000 OUTFIL FILES = 03, STARTREC = 20001, ENDREC = 30000

  • Наконец, если у нас более 30000 записей во входном файле, и мы не указали, что делать с этими записями, SORT не будет беспокоиться о них. Это означает, что последний выходной файл будет содержать только 10000 записей.

Надеюсь, я вам разъяснил. Вернитесь, если возникнут вопросы.

person Raja Reddy    schedule 30.04.2011

Предположим, вы не знаете, сколько записей находится в наборе данных, но хотите разделить записи как можно поровну между двумя наборами выходных данных. Вы можете использовать параметр SPLIT в OUTFIL, чтобы поместить первую запись в OUTPUT1, вторую запись в OUTPUT2, третью запись в OUTPUT1, четвертую запись в OUTPUT2 и так далее, пока у вас не закончатся записи. SPLIT разделяет записи по одной среди наборов данных, указанных FNAMES. Следующие операторы разделяют записи между двумя наборами данных OUTFIL: OPTION COPY OUTFIL FNAMES = (OUTPUT1, OUTPUT2), SPLIT С 17 входными записями результаты, полученные для OUTPUT1, следующие: Запись 01 Запись 03 Запись 05 Запись 07 Запись 09 Запись 11 Запись 13 Запись 15 Запись 17

Точно так же параметр SPLITBY = n OUTFIL разделяет записи n за раз среди наборов данных, указанных FNAMES. Следующие операторы разделяют записи по четыре между тремя наборами данных OUTFIL: OPTION COPY OUTFIL FNAMES = (OUT1, OUT2, OUT3), SPLITBY = 4

person uday vellore    schedule 26.06.2019