Сравнить два файла, затем сопоставить и добавить записи, чтобы скопировать два файла сравнения
У меня есть требование сравнить два файла, затем сопоставить записи одного файла и сопоставить их в другой файл с помощью соединений в 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