Syncsort Sum Fields= Нет, не удаляет дубликаты
Я пытаюсь запустить задание SYNCSORT, которое удалит дублирующиеся записи, и когда я его запускаю, я все еще получаю дубликаты. Ниже приведен код SYNCSORT, который я использую:
INCLUDE COND=(((61,1,CH,EQ,C'P'),OR,
(61,1,CH,EQ,C'V')),AND,
(8,2,CH,EQ,C'FL'))
OUTREC FIELDS=(1:12,20,
30:36,20,
55:61,1)
SORT FIELDS=(30,20,CH,A,
01,20,CH,A)
SUM FIELDS=NONE
Вход выглядит следующим образом:
----+----1----+----2----+----3----+----4----+----5----+----6
FL AMELIA CITY
32034 FL NASSAU FERNANDINA BEACH P
32034 FL NASSAU AMELIA CITY V
32034 FL NASSAU AMELIA ISLAND S
32034 FL NASSAU FERNANDINA S
Я получаю большую часть ожидаемого результата, за исключением того, что я все еще получаю дубликаты. У меня есть следующий вывод:
----+----1----+----2----+----3----+----4----+----5----+
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADINGTON V
POLK BRADLEY P
HILLSBOROUGH BRANDON P
SUWANNEE BRANFORD P
MIAMI-DADE BRICKELL V
Буду признателен за любую помощь, так как я не могу найти свою ошибку.
2 ответа
Это то, что вы суммируете на:
< ------------ Sort Field ----------------------->
----+----1----+----2----+----3----+----4----+----5----+----6
FL AMELIA CITY
32034 FL NASSAU FERNANDINA BEACH P
32034 FL NASSAU AMELIA CITY V
32034 FL NASSAU AMELIA ISLAND S
32034 FL NASSAU FERNANDINA S
Дубликаты записей будут отличаться в первых 11 байтах, которые вы не видите. Попробуйте удалить outrec, чтобы проверить.
Возможные изменения -
- Измените outrec на inrec
- перекодировать сортировку с полями, связанными с выводом, см. следующее:
Следующие сортировки сортируются на основе выходных записей:
INCLUDE COND=(((61,1,CH,EQ,C'P'),OR,
(61,1,CH,EQ,C'V')),AND,
(8,2,CH,EQ,C'FL'))
OUTREC FIELDS=(1:12,20,
30:36,20,
55:61,1)
SORT FIELDS=(42,20,CH,A,
12,20,CH,A)
SUM FIELDS=NONE
Неважно, в каком порядке вы кодируете различные этапы "сортировки", они будут выполняться в том порядке, который хочет SORT.
В вашем случае это будет INCLUDE
, затем SORT
, затем SUM
, затем OUTREC
, Вы можете проверить, что это так, полностью перевернув контрольные карты, вы получите идентичный выход.
Если вы хотите сделать что-то перед сортировкой, вы используете INREC
, а не просто попытаться найти OUTREC перед оператором SORT. Здесь, поскольку вы сортируете, вы хотите включить только те данные, которые вам нужны. Вы не хотите включать интервал для форматирования. Почему вы хотите загрузить свой файл в SORT с дополнительными идентичными данными в каждой записи?
На INREC и OUTREC, пожалуйста, не используйте FIELDS
, На OUTFIL
пожалуйста, не используйте OUTREC
, Должно быть очевидно, что FIELDS "перегружен" (посмотрите, сколько раз вы использовали FIELDS, и посмотрите, сколько "одинаковых"), а OUTREC "перегружен". Более 10 лет назад BUILD
был введен, чтобы сделать вещи намного понятнее - он описывает, что он делает, и каждый раз, когда вы видите BUILD, это означает только BUILD.
INCLUDE COND=(((61,1,CH,EQ,C'P'),
OR,
(61,1,CH,EQ,C'V')),
AND,
(8,2,CH,EQ,C'FL'))
INREC BUILD=(36,20,
12,20,
61,1)
SORT FIELDS=(1,40,CH,A)
OUTREC BUILD=(21,10,
10X,
1,20,
5X,
41,1)
INREC выбирает только те данные, которые вы хотите, и в порядке, в котором вам нужно указать только один ключ SORT.
Затем OUTREC форматирует данные так, как вы хотите. Для каждой записи в сортировке было сохранено 15 байтов (пробелы). 10X
10 пробелов, 5X - пять пробелов.
Обратите внимание, что это намного легче, кодировать и понимать, и, следовательно, более легко обслуживать, если вы включаете "явные" пробелы, а не неявные с использованием номеров столбцов. 10 столбцов отчета и интервалы между столбцами 1 и 2 неверны. Вы хотите изменить все ссылки на столбцы, просто добавить один дополнительный пробел, или вы бы предпочли изменить 7X на 8X, а остальное сработает само? Даже если вам нравятся утомительные перемены, помните своих коллег:-)
Если ваши данные уже в порядке , не используйте SUM FIELDS = NONE. Используйте функции отчетов OUTFIL, REMOVECC
, NODETAIL
а также SECTIONS
с TRAILER3
, НИКОГДА не сортируйте данные только для того, чтобы удалить дубликаты с SUM FIELDS=NONE
,