Ежедневные требования к приложениям в корпоративном мире, которые могут быть достигнуты с помощью служебных программ, показаны ниже:
1. Файл имеет 100 записей. Первые 10 записей должны быть записаны в выходной файл.
//JSTEP020 EXEC PGM=ICETOOL //TOOLMSG DD SYSOUT=* //DFSMSG DD SYSOUT=* //IN1 DD DSN=MYDATA.URMI.STOPAFT,DISP=SHR //OUT1 DD SYSOUT=* //TOOLIN DD * COPY FROM(IN1) TO(OUT1) USING(CTL1) /* //CTL1CNTL DD * OPTION STOPAFT=10 /*
Опция STOPAFT прекратит чтение входного файла после 10-й записи и завершит программу. Следовательно, 10 записей записываются на выход.
2. Входной файл содержит одну или несколько записей для одного и того же номера сотрудника. Написать уникальные записи для вывода.
//STEP010 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN=MYDATA.URMI.DUPIN,DISP=SHR //SORTOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=(1,15,ZD,A) SUM FIELDS=NONE /*
SUM FIELDS = NONE удаляет дубликаты полей, указанных в поле SORT FIELDS. В приведенном выше примере номер сотрудника находится в поле позиции 1,15. Выходной файл будет содержать уникальные номера сотрудников, отсортированные по возрастанию.
3. Перезаписать содержимое входной записи.
//JSTEP010 EXEC PGM=SORT //SORTIN DD DSN= MYDATA.URMI.SAMPLE.MAIN,DISP=SHR //SORTOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD * OPTION COPY INREC OVERLAY=(47:1,6) /*
Во входном файле содержимое в позиции 1,6 перезаписывается в позицию 47,6 и затем копируется в выходной файл. Операция INREC OVERLAY используется для перезаписи данных во входном файле перед их копированием в выходной файл.
4. Добавление порядкового номера в выходной файл.
//JSTEP010 EXEC PGM=SORT //SORTIN DD * data1 data2 data3 /* //SORTOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD * OPTION COPY BUILD=(1:1,5,10:SEQNUM,4,ZD,START=1000,INCR=2) /*
Выход будет:
data1 1000 data2 1002 data3 1004
Четырехзначный порядковый номер добавляется в вывод в позиции 10, начиная с 1000 и увеличивается на 2 для каждой записи.
5. Добавление заголовка / трейлера к выходному файлу.
//JSTEP010 EXEC PGM=SORT //SORTIN DD * data1 data2 data3 /* //SORTOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=COPY OUTFIL REMOVECC, HEADER1=(1:C'HDR',10:X'020110131C'), TRAILER1=(1:C'TRL',TOT=(10,9,PD,TO=PD,LENGTH=9)) /*
Выход будет:
HDR 20110131 data1 data2 data3 TRL 000000003
TOT рассчитывает количество записей во входном файле. HDR и TRL добавляются в качестве идентификаторов в заголовок / трейлер, который определяется пользователем и может быть настроен в соответствии с потребностями пользователей.
6. Условная обработка
//JSTEP010 EXEC PGM=SORT //SORTIN DD * data1select data2 data3select /* //SORTOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD * INREC IFTHEN=(WHEN=(6,1,CH,NE,C' '),BUILD=(1:1,15), IFTHEN=(WHEN=(6,1,CH,EQ,C' '),BUILD=(1:1,5,7:C'EMPTY ') OPTION COPY /*
Выход будет:
data1select
data2 EMPTY
data3select
На основании 6-ой позиции файла строение выходного файла варьируется. Если 6-я позиция — ПРОСТРАНСТВА, тогда текст «ПУСТО» добавляется к входной записи. В противном случае входная запись записывается на выход как есть.
7. Резервное копирование файла
//JSTEP001 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSIN DD * //SYSOUT DD SYSOUT=* //SORTOUT DD DUMMY //SYSUT1 DD DSN=MYDATA.URMI.ORIG,DISP=SHR //SYSUT2 DD DSN=MYDATA.URMI.BACKUP,DISP=(NEW,CATLG,DELETE), // DCB=*.SYSUT1,SPACE=(CYL,(50,1),RLSE)
IEBGENER копирует файл в SYSUT1 в файл в SYSUT2. Обратите внимание, что файл в SYSUT2 принимает тот же DCB, что и файл SYSUT1 в приведенном выше примере.
8. Сравнение файлов
//STEP010 EXEC PGM=SORT //MAIN DD * 1000 1001 1003 1005 //LOOKUP DD * 1000 1002 1003 //MATCH DD DSN=MYDATA.URMI.SAMPLE.MATCH,DISP=OLD //NOMATCH1 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH1,DISP=OLD //NOMATCH2 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH2,DISP=OLD //SYSOUT DD SYSOUT=* //SYSIN DD * JOINKEYS F1=MAIN,FIELDS=(1,4,A) JOINKEYS F2=LOOKUP,FIELDS=(1,4,A) JOIN UNPAIRED,F1,F2 REFORMAT FIELDS=(?,F1:1,4,F2:1,4) OPTION COPY OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,4) OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,4) OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:2,4) /*
-
JOINKEYS указывает поле, в котором сравниваются два файла.
-
РЕФОРМАТИЧЕСКИЕ ПОЛЯ =? помещает ‘B’ (сопоставленные записи), ‘1’ (присутствует в файле1, но не в файле2) или ‘2’ (присутствует в файле2, но не в файле1) в 1-ю позицию выходного BUILD.
-
JOIN UNPAIRED выполняет полное внешнее соединение двух файлов.
JOINKEYS указывает поле, в котором сравниваются два файла.
РЕФОРМАТИЧЕСКИЕ ПОЛЯ =? помещает ‘B’ (сопоставленные записи), ‘1’ (присутствует в файле1, но не в файле2) или ‘2’ (присутствует в файле2, но не в файле1) в 1-ю позицию выходного BUILD.
JOIN UNPAIRED выполняет полное внешнее соединение двух файлов.
Выход будет:
MATCH File 1000 1003 NOMATCH1 File 1001 1005 NOMATCH2 File 1002
Та же функциональность может быть достигнута и с помощью ICETOOL.