Сравнить два файла, затем сопоставить и добавить записи, чтобы скопировать два файла сравнения

У меня есть требование сравнить два файла, затем сопоставить записи одного файла и сопоставить их в другой файл с помощью соединений в jcl. Я не уверен, является ли этот файл правильным или нет. Не могли бы вы мне помочь? первый входной файл имеет длину только 18 записей, который будет сравниваться с длиной первых 18 входных данных. Если он совпадает, то мы записываем запись в выходной файл на основе условия buid, а если не совпадает, то копируем эту запись в другой файл

SORT FIELDS=COPY                             
JOINKEYS FILE=F1,FIELDS=(1,18,A)             
JOINKEYS FILE=F2,FIELDS=(1,18,A)             
REFORMAT FIELDS=(F2:1,258,F2:264,1,F2:334,2) 
OUTFIL FNAMES=MATCH                          
SORT FIELDS=COPY                             
JOINKEYS FILE=F1,FIELDS=(1,18,A)             
JOINKEYS FILE=F2,FIELDS=(1,18,A)             
JOIN UNPAIRED,F2,ONLY                        
REFORMAT FIELDS=(F2:1,258,F2:264,1,F2:334,2) 
OUTFIL FNAMES=UNMATCH                        

1 ответ

Я пробовал с приведенным ниже примером. Работает нормально. Длина записи входных и выходных файлов - 80. Формат записи (RECFM) - FB.

//SYSIN    DD    *                                          
  JOINKEYS FILE=F1,FIELDS=(1,10,A),SORTED                   
  JOINKEYS FILE=F2,FIELDS=(1,10,A),SORTED                   
  JOIN UNPAIRED,F1,F2                                       
  REFORMAT FIELDS=(F1:1,10,F2:1,10,?)                       
  OPTION COPY                                               
  OUTFIL FNAMES=F1ONLY,INCLUDE=(21,1,CH,EQ,C'1'),           
  BUILD=(1,10,70X)                                          
  OUTFIL FNAMES=F2ONLY,INCLUDE=(21,1,CH,EQ,C'2'),           
  BUILD=(11,10,70X)                                         
  OUTFIL FNAMES=BOTH,INCLUDE=(21,1,CH,EQ,C'B'),             
  BUILD=(1,10,70X)                                          
/*

Добро пожаловать в стек переполнения! Вы должны использовать индикаторный метод в dfsort, чтобы получить то, что вы ожидаете. Смотрите ниже утверждения SORT.

JOINKEYS FILE=F1,FIELDS=(1,18,A)             
JOINKEYS FILE=F2,FIELDS=(1,18,A)             
REFORMAT FIELDS=(F2:1,258,F2:264,1,F2:334,2,?) 
OUTFIL FNAMES=BOTH,INCLUDE=(262,1,CH,EQ,C'B'),BUILD=(1,261)                          
OUTFIL FNAMES=F1ONLY,INCLUDE=(262,1,CH,EQ,C'1'),BUILD=(1,258)
OUTFIL FNAMES=F2ONLY,INCLUDE=(262,1,CH,EQ,C'2'),BUILD=(259,3)

? в REFORMAT FIELD отвечает за заполнение индикатора на 262-й позиции. Если ключ совпадает в обоих файлах, 262-я позиция будет иметь B, значит ОБА. Если ключ не совпадает, 262-я позиция сообщит вам, из какого файла сделана запись, 1 или же 2,

Замечания:

  • Вы можете изменить BUILD оператор для записи нужных вам столбцов, если ключи не совпадают. Убедитесь, что эти столбцы упоминаются в REFORMAT FIELDS,

  • Убедитесь, что у вас есть имена DD BOTH, F1ONLY а также F2ONLY в JCL.

Подробнее здесь

Вы можете реализовать логику, используя 1. Программа JCL - Использование JOIN KEYS 2. Программа COBOL - Логика сопоставления файлов (обе логики объяснены в следующей ссылке) 3. Программа Easytrieve или REXX

https://www.youtube.com/watch?v=pQumm7ueYik&list=PLB4QPUJFZRcTsP1cKe2sSIObFMlvkyjnn&index=4

Другие вопросы по тегам