Kể từ 12.200 người đã xem xét vấn đề này và không có một câu trả lời:
DFSORT và SyncSort là Mainframe chủ yếu sắp xếp sản phẩm. Thẻ kiểm soát của họ có nhiều điểm tương đồng và một số khác biệt.
JOINKEYS FILE=F1,FIELDS=(key1startpos,7,A)
JOINKEYS FILE=F2,FIELDS=(key2startpos,7,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:1,5200,F2:1,5200)
SORT FIELDS=COPY
Một "JOINKEYS" được tạo thành từ ba Tác vụ. Tiểu nhiệm vụ 1 là JOINKEYS đầu tiên. Tiểu nhiệm vụ 2 là JOINKEYS thứ hai. Nhiệm vụ chính sau và là nơi dữ liệu được nối được xử lý. Trong ví dụ trên, nó là một thao tác COPY đơn giản. Dữ liệu được nối sẽ chỉ được ghi vào SORTOUT.
Câu lệnh JOIN xác định rằng cũng như các bản ghi phù hợp, các bản ghi UNPAIRED F1 và F2 sẽ được trình bày cho Nhiệm vụ chính.
Câu lệnh REFORMAT xác định hồ sơ sẽ được trình bày cho Nhiệm vụ chính.Một ví dụ hiệu quả hơn, tưởng tượng rằng ba trường được yêu cầu từ F2, là:
REFORMAT FIELDS=(F1:1,5200,F2:1,10,30,1,5100,100)
Mỗi trường trên F2 được xác định với vị trí bắt đầu và độ dài.
Bản ghi sau đó được xử lý bởi tác vụ chính dài 5311 byte và các trường từ F2 có thể được tham chiếu bởi 5201,10,5211,1,5212,100 với bản ghi F1 là 1.5200.
Cách tốt hơn để đạt được điều tương tự là giảm kích thước F2 bằng JNF2CNTL.
//JNF2CNTL DD *
INREC BUILD=(207,1,10,30,1,5100,100)
Một số cài đặt của SyncSort không hỗ trợ JNF2CNTL, và kể cả trường hợp được hỗ trợ (từ Syncsort MFX cho z/OS phiên bản 1.4.1.0 trở đi), nó không được ghi nhận bởi SyncSort. Đối với người dùng 1.3.2 hoặc 1.4.0, bản cập nhật có sẵn từ SyncSort để cung cấp hỗ trợ JNFnCNTL.
Cần lưu ý rằng JOINKEYS theo mặc định SORTs dữ liệu, với tùy chọn EQUALS. Nếu dữ liệu cho tệp JOINKEYS đã được sắp xếp, SORTED sẽ được chỉ định. Đối với DFSORT NOSEQCHK cũng có thể được xác định nếu không cần kiểm tra trình tự.
JOINKEYS FILE=F1,FIELDS=(key1startpos,7,A),SORTED,NOSEQCHK
Mặc dù yêu cầu lạ, nhưng không thể xác định được tệp gốc, tất cả các bản ghi chưa khớp sẽ được chuyển đến tệp đầu ra riêng biệt.
Với DFSORT, có một điểm đánh dấu phù hợp, được chỉ định với? trong REFORMAT:
REFORMAT FIELDS=(F1:1,5200,F2:1,10,30,1,5100,100,?)
Điều này làm tăng độ dài của bản ghi REFORMAT bởi một byte. Các ? có thể được chỉ định ở bất kỳ nơi nào trên bản ghi REFORMAT và không cần phải được chỉ định. Các ? được giải quyết bởi DFSORT thành: B, dữ liệu có nguồn gốc từ cả hai tệp; 1, bản ghi chưa từng có từ F1; 2, bản ghi chưa từng có từ F2.
SyncSort không có điểm đánh dấu phù hợp. Sự vắng mặt hoặc sự hiện diện của dữ liệu trên bản ghi REFORMAT phải được xác định bằng các giá trị. Chọn một byte trên cả hai bản ghi đầu vào mà không thể chứa một giá trị cụ thể (ví dụ, trong một số, quyết định giá trị không phải là số). Sau đó, chỉ định giá trị đó làm ký tự FILL trên REFORMAT.
REFORMAT FIELDS=(F1:1,5200,F2:1,10,30,1,5100,100),FILL=C'$'
Nếu vị trí 1 trên F1 không thể tự nhiên có "$" và vị trí 20 trên F2 không thể, thì hai vị trí đó có thể được sử dụng để thiết lập kết quả khớp. Toàn bộ hồ sơ có thể được kiểm tra nếu cần thiết, nhưng hút thêm thời gian CPU.
Yêu cầu rõ ràng là cho tất cả các bản ghi chưa khớp, từ F1 hoặc F2, được ghi vào một tệp. Điều này đòi hỏi một tuyên bố định dạng trong đó bao gồm cả các bản ghi trong toàn bộ của họ:
DFSORT, sản lượng kỷ lục chưa từng có:
REFORMAT FIELDS=(F1:1,5200,F2:1,5200,?)
OUTFIL FNAMES=NOMATCH,INCLUDE=(10401,1,SS,EQ,C'1,2'),
IFTHEN=(WHEN=(10401,1,CH,EQ,C'1'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
SyncSort, sản lượng kỷ lục chưa từng có:
REFORMAT FIELDS=(F1:1,5200,F2:1,5200),FILL=C'$'
OUTFIL FNAMES=NOMATCH,INCLUDE=(1,1,CH,EQ,C'$',
OR,5220,1,CH,EQ,C'$'),
IFTHEN=(WHEN=(1,1,CH,EQ,C'$'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
Các mã hóa cho SyncSort cũng sẽ làm việc với DFSORT.
Để có được bản ghi phù hợp được viết dễ dàng.
OUTFIL FNAMES=MATCH,SAVE
LƯU đảm bảo rằng tất cả các bản ghi không được viết bởi OUTFIL khác sẽ được viết ở đây.
Có một số yêu cầu định dạng lại, chủ yếu là dữ liệu đầu ra từ F1, nhưng để chọn một số trường từ F2. Điều này sẽ làm việc cho một trong hai DFSORT hoặc SyncSort:
OUTFIL FNAMES=MATCH,SAVE,
BUILD=(1,50,10300,100,51,212,5201,10,263,8,5230,1,271,4929)
Toàn bộ điều, với bắt đầu và độ dài tùy ý là:
DFSORT
JOINKEYS FILE=F1,FIELDS=(1,7,A)
JOINKEYS FILE=F2,FIELDS=(20,7,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:1,5200,F2:1,5200,?)
SORT FIELDS=COPY
OUTFIL FNAMES=NOMATCH,INCLUDE=(10401,1,SS,EQ,C'1,2'),
IFTHEN=(WHEN=(10401,1,CH,EQ,C'1'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
OUTFIL FNAMES=MATCH,SAVE,
BUILD=(1,50,10300,100,51,212,5201,10,263,8,5230,1,271,4929)
SyncSort
JOINKEYS FILE=F1,FIELDS=(1,7,A)
JOINKEYS FILE=F2,FIELDS=(20,7,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:1,5200,F2:1,5200),FILL=C'$'
SORT FIELDS=COPY
OUTFIL FNAMES=NOMATCH,INCLUDE=(1,1,CH,EQ,C'$',
OR,5220,1,CH,EQ,C'$'),
IFTHEN=(WHEN=(1,1,CH,EQ,C'$'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
OUTFIL FNAMES=MATCH,SAVE,
BUILD=(1,50,10300,100,51,212,5201,10,263,8,5230,1,271,4929)
Đừng cần hai bước. Không cần ICETOOL. SORT với JOINKEYS sẽ làm điều đó. Từ những gì được mô tả, anyway. –