Как получить совпадающие записи из F1 и F2 в выходном файле 1 и несовпадающие записи из F2 в выходном файле 2 с помощью сортировки

Привет, я пытаюсь найти совпадающие и несовпадающие записи из 2 файлов, один файл представляет собой файл ошибок с 181 LRECL, второй файл F2 является действительным файлом записей с тем же 181 LRECL.

Пример файла ОШИБКИ

12345678901
11111111111
11111111111
22222222222

ДЕЙСТВИТЕЛЬНЫЙ файл имеет

33333333333
11111111111
11111111111
44444444444

Я реализовал левое внешнее соединение

//F1       -> ERROR FILE
//F2       -> VALID FILE
//SYSOUT   DD SYSOUT=*                                                       
//SYSIN    DD *                                                       
  JOINKEYS F1=MAIN,FIELDS=(43,11,A)                            
  JOINKEYS F2=LOOKUP,FIELDS=(10,11,A)                               
  JOIN UNPAIRED,F2 ONLY                                                
  SORT FIEDLS=COPY
/*   

           

поэтому, используя это, я смог получить действительные записи, которых не было в файле ошибок в sysout

СИСТЕМНЫЙ ВЫХОД:

33333333333
44444444444

но я не хочу терять записи соответствия из обоих файлов и хочу записать записи соответствия из обоих файлов во второй выходной файл.

Я пытался реализовать

FULL OUTER Join, но не смог получить результат

//F1 -> Error File
//F2 -> Valid File
//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=(43,11,A)                            
  JOINKEYS F2=LOOKUP,FIELDS=(10,11,A)                               
  JOIN UNPAIRED,F1,F2                                                 
  REFORMAT FIELDS=(?,F1:1,181,F2:1,181)                                
  OPTION COPY                                                         
  OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,181)                                                
  OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,181) 
  OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:2,181) 
/*     

         

person Sandeep Prajapati    schedule 25.05.2021    source источник
comment
хорошо удалено, спасибо   -  person Sandeep Prajapati    schedule 27.05.2021


Ответы (2)


Согласно приведенному выше снимку, вы сначала переформатировали 181 байт файла ошибки, а затем 181 байт файла VALID. Таким образом, при написании файла NOMATCH2 вы должны строить как BUILD=(1:183,181) вместо BUILD=(1:2,181). Надеюсь, это решит вашу проблему, и, пожалуйста, обновите здесь, если вы все еще не можете решить проблему.

С уважением, Анбу.

person Anbu Thirugnana Sekar    schedule 26.05.2021
comment
Привет, Анбу, спасибо за ответ. Я применил вышеуказанное решение, и в файлах NOMATCH2 и 1, похоже, скопированы правильные данные. Еще раз спасибо. - person Sandeep Prajapati; 26.05.2021

Для полноты выкладываю обновленный скрипт и полученные выходные файлы:

 JOINKEYS F1=MAIN,FIELDS=(43,11,A)
 JOINKEYS F2=LOOKUP,FIELDS=(10,11,A)
 JOIN UNPAIRED,F1,F2
 REFORMAT FIELDS=(?,F1:1,181,F2:1,181)
 OPTION COPY
 OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,181)
 OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,181)
 OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:183,181)

Выходной файл ПОИСКПОЗ должен содержать:

11111111111
11111111111
11111111111
11111111111

Выходной файл NOMATCH1 должен содержать:

12345678901
22222222222

Выходной файл NOMATCH2 должен содержать:

33333333333
44444444444

Это было проверено с помощью AHLSORT для Windows v14r3-117-ge2d0a249, но результаты должны быть такими же, как и с DFSORT для z/OS.

person user3169782    schedule 27.05.2021