Чтобы получить несколько выходных наборов данных из SORT, вы используете OUTFIL
. Вам нужно 24 набора данных, поэтому вам потребуется 24 OUTFIL.
Вы можете выбрать, что будет в каждом OUTFIL, используя INCLUDE=
или OMIT=
.
OUTFIL FNAMES=xxx01,
INCLUDE =(start,length,CH,EQ,C'01')
24 из них, 24 имени DD в вашем JCL.
«start» и «length» — это начало часа в отметке времени и его длина (предположительно два). Измените FNAMES, измените литерал в INCLUDE=.
В зависимости от качества ваших данных вы можете включить 25-й OUTFIL с SAVE, который получит все записи, которые не появились хотя бы в одном другом OUTFIL.
Чтобы получить информацию из «заголовка» обо всех данных, относящихся к этому заголовку, вы используете IFTHEN=(WHEN=GROUP
.
Вам нужно определить начало группы, и вы должны убедиться, что начало группы не может случайно попасть в ваши данные.
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,
BEGIN=(condition),
PUSH=(column-to-push-to:15,2))
condition
необходимо заменить допустимым логическим выражением, которое надежно идентифицирует ваш заголовок. 1,1,CH,EQ,C'‹' может быть достаточно, или вам может потребоваться объединить дополнительные отдельные условия с AND, чтобы идентифицировать ваш заголовок. У вас есть <
, >
, -
и :
для работы. Если этого недостаточно, вам потребуется дополнительный код для определения года и/или времени. Если этого недостаточно, длина записи (или наличие места для записи фиксированной длины). Если этого недостаточно, то у вас есть данные, которые выглядят как заголовок, и вы набиты.
Как насчет столбца для отправки? Это зависит от того, имеют ли ваши записи фиксированную или переменную длину.
Фиксированная длина — это просто. Вы делаете столбец для отправки номером столбца после последнего байта данных в вашей записи. Это продлит запись. Вы должны позже приспособиться к этому.
С переменной длиной сложнее, потому что вам нужно расширить запись в начале данных (иначе вы сделаете все свои записи переменной длины фиксированной длины, что бессмысленно).
INREC IFTHEN=(WHEN=INIT.
BUILD=(1,4,2X,5)),
Это создает два байта пространства, 2X (два пробела) для каждой записи. Затем данные до конца записи копируются (все 5 отдельно) в следующую доступную колонку в BUILD, которая равна семи. Для записей переменной длины необходимо включать слово дескриптора записи в каждую BUILD, поэтому 1,4. Как только это будет сделано, любое изменение длины будет автоматически выполнено SORT.
INREC IFTHEN=(WHEN=INIT.
BUILD=(1,4,2X,5)),
IFTHEN=(WHEN=GROUP,
BEGIN=(condition),
PUSH=(5:15,2))
В 24 INCLUDE= вы тестируете два байта, которые были «вставлены» в течение часа.
В каждом OUTFIL вам необходимо вернуть записи к их исходному содержанию (без значения PUSHed). BUILD=(1,original-length) для записей фиксированной длины, BUILD=(1,4,7) для записей переменной длины, где 7 означает "от седьмого столбца до конца записи".
person
Bill Woodger
schedule
08.04.2016