Это кажется именно тем, что вам нужно. Я не уверен, что вы захотите это в ближайшее время.
Все записи в каждом файле будут отсортированы, как я предполагаю, по всей их длине. Это означает, что при первом запуске ваш вывод будет в другой последовательности, чем ввод.
«Изменение» будет выглядеть точно так же, как НОВОЕ, если изменение возможно.
Если вы согласны с обоими из них, вы должны были сказать об этом в своем вопросе.
//SYSIN DD *
JOINKEYS FILE=F1,FIELDS=(1,79,A)
JOINKEYS FILE=F2,FIELDS=(1,79,A)
JOIN UNPAIRED,F2
REFORMAT FIELDS=(?,F2:1,2,1,79)
INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'2'),
OVERLAY=(1:C'NEW')),
IFTHEN=(WHEN=(NONE,
OVERLAY=(1:3X))
SORT FIELDS=COPY
UNPAIRED,F2 даст вам все совпадения, а также те из F2 (ваш НОВЫЙ ввод), которые не совпадают.
Оператор REFORMAT помещает маркер совпадения соединения (?) в первую позицию, затем помещает два байта чего-либо, а затем все данные. Запись REFORMAT будет иметь размер 82 байта.
В INREC поле, полученное из маркера совпадения, проверяется, чтобы при необходимости NEW можно было наложить в начале записи. В противном случае будут наложены три пробела.
Существует более ясный способ выразить тот же вывод:
//SYSIN DD *
JOINKEYS FILE=F1,FIELDS=(1,79,A)
JOINKEYS FILE=F2,FIELDS=(1,79,A)
JOIN UNPAIRED,F2
REFORMAT FIELDS=(?,F2:1,79)
INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'2'),
BUILD=(C'NEW',2,79)),
IFTHEN=(WHEN=(NONE,
BUILD=(3X,2,79)),
SORT FIELDS=COPY
На этот раз используется BUILD, а не OVERLAY.
Благодаря лучшему (любому?) знанию ваших данных могут быть доступны лучшие решения.
Даже с информацией, предоставленной на другом сайте, а не здесь, этого недостаточно.
//SYSIN DD *
JOINKEYS FILE=F1,FIELDS=(1,79,A)
JOINKEYS FILE=F2,FIELDS=(1,79,A)
JOIN UNPAIRED,F2,ONLY
SORT FIELDS=COPY
/*
Мы можем догадаться, что ваш файл 79, FB, но это не обязательно.
Чтобы получить только несоответствия и поместить NEW впереди вашего существующего кода, легко:
//SYSIN DD *
JOINKEYS FILE=F1,FIELDS=(1,79,A)
JOINKEYS FILE=F2,FIELDS=(1,79,A)
JOIN UNPAIRED,F2,ONLY
INREC BUILD=(C'NEW',1,79)
SORT FIELDS=COPY
Вы выводите, конечно, теперь 82 байта на запись.
Однако это предполагает, что у вас нет (и никогда не может быть) дубликатов на вашем 79-байтовом ключе и что вся ваша запись составляет 79 байтов.
Также предполагается, что вас не волнует порядок выходного файла.
Каждый JOINKEYS СОРТИРУЕТ свой файл, а затем данные представляются процессу сопоставления.
Имейте в виду, что с изменением и этим методом проверки (сортировка всей записи, сравнение всей записи) вам будет трудно не вывести две записи для записи, которая логически одинакова. Один будет выглядеть как Удалить (из F1), а другой как НОВЫЙ (по F2), тогда как все вместе они представляют собой просто Изменение.
person
Bill Woodger
schedule
11.11.2014