JCL - Thủ thuật sắp xếp cơ bản

Các yêu cầu ứng dụng hàng ngày trong thế giới doanh nghiệp có thể đạt được bằng các Chương trình Tiện ích được minh họa dưới đây:

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               
/*

Tùy chọn STOPAFT sẽ ngừng đọc tệp đầu vào sau bản ghi thứ 10 và kết thúc chương trình. Do đó, 10 bản ghi được ghi vào đầu ra.

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 xóa các bản sao trên các trường được chỉ định trong SORT FIELDS. Trong ví dụ trên, số nhân viên ở vị trí trường 1,15. Tệp đầu ra sẽ chứa các số nhân viên duy nhất được sắp xếp theo thứ tự tăng dần.

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)                      
/*

Trong tệp đầu vào, nội dung ở vị trí 1,6 được ghi đè lên vị trí 47,6 và sau đó được sao chép vào tệp đầu ra. Hoạt động INREC OVERLAY được sử dụng để viết lại dữ liệu trong tệp đầu vào trước khi sao chép ra đầu ra.

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)                      
/*

Đầu ra sẽ là:

data1    1000
data2    1002
data3    1004

Số thứ tự gồm 4 chữ số được thêm vào đầu ra ở vị trí 10, bắt đầu từ 1000 và tăng lên 2 cho mọi bản ghi.

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)) 
/*

Đầu ra sẽ là:

HDR       20110131
data1    
data2    
data3 
TRL       000000003

TOT tính toán số lượng bản ghi trong tệp đầu vào. HDR và ​​TRL được thêm vào dưới dạng số nhận dạng vào tiêu đề / đoạn giới thiệu, được người dùng xác định và có thể được tùy chỉnh theo nhu cầu của người dùng.

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                                                     
/*

Đầu ra sẽ là:

data1select   
data2 EMPTY  
data3select

Dựa trên vị trí thứ 6 của tệp, BUILD của tệp đầu ra khác nhau. Nếu vị trí thứ 6 là SPACES, thì văn bản "EMPTY" được thêm vào bản ghi đầu vào. Khác, bản ghi đầu vào được ghi vào đầu ra, nguyên trạng.

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 sao chép tệp trong SYSUT1 sang tệp trong SYSUT2. Xin lưu ý rằng tệp trong SYSUT2 có cùng DCB như của SYSUT1 trong ví dụ trên.

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 chỉ định trường mà hai tệp được so sánh.

  • REFORMAT FIELDS =? đặt 'B' (bản ghi phù hợp), '1' (có trong tệp1, nhưng không có trong tệp2), hoặc "2" (có trong tệp2 nhưng không có trong tệp1) ở vị trí đầu tiên của BUILD đầu ra.

  • JOIN UNPAIRED thực hiện một kết nối bên ngoài đầy đủ trên hai tệp.

Đầu ra sẽ là:

MATCH File
1000
1003

NOMATCH1 File
1001
1005

NOMATCH2 File
1002

Chức năng tương tự cũng có thể đạt được khi sử dụng ICETOOL.