JCL - เทคนิคการจัดเรียงขั้นพื้นฐาน
ข้อกำหนดการใช้งานประจำวันในโลกขององค์กรที่สามารถทำได้โดยใช้โปรแกรมยูทิลิตี้แสดงไว้ด้านล่าง:
1. A file has 100 records. The first 10 records need to be written to output file.
//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. Input file has one or more records for same employee number. Write unique records to output.
//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. Overwrite input record content.
//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. Adding a sequence number to the output file.
//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
หมายเลขลำดับ 4 หลักจะถูกเพิ่มในเอาต์พุตที่ตำแหน่ง 10 เริ่มต้นที่ 1000 และเพิ่มขึ้นด้วย 2 สำหรับทุกระเบียน
5. Adding Header/Trailer to output file.
//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. Conditional Processing
//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 ของไฟล์ BUILD ของไฟล์เอาต์พุตจะแตกต่างกันไป ถ้าตำแหน่งที่ 6 คือช่องว่างข้อความ "ว่าง" จะถูกต่อท้ายในบันทึกข้อมูลเข้า มิฉะนั้นบันทึกอินพุตจะถูกเขียนไปยังเอาต์พุตตามที่เป็นอยู่
7. Backing up a file
//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. File Comparison
//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 ระบุฟิลด์ที่ใช้เปรียบเทียบไฟล์ทั้งสอง
REFORMAT FIELDS =? วาง 'B' (ระเบียนที่ตรงกัน), '1' (แสดงในไฟล์ 1 แต่ไม่ใช่ในไฟล์ 2) หรือ '2' (แสดงในไฟล์ 2 แต่ไม่อยู่ในไฟล์ 1) ในตำแหน่งที่ 1 ของ BUILD เอาต์พุต
JOIN UNPAIRED ทำการรวมภายนอกแบบเต็มในสองไฟล์
ผลลัพธ์จะเป็น:
MATCH File
1000
1003
NOMATCH1 File
1001
1005
NOMATCH2 File
1002
ฟังก์ชันเดียวกันนี้สามารถทำได้โดยใช้ ICETOOL ด้วย