Тестовые данные на следующей записи

Я хотел бы знать, возможно ли прочитать следующую запись, когда мы используем SyncSORT (SyncTool) на основе определенного условия.

Пример ввода

Ключ сортировки будет следующим: номер счета + тип записи по убыванию + сумма.

account nbr  amount  record type
11111111111   10      reversal    not in the output
11111111111   10      deposit     not in the output
33333333333   20      deposit     in the output
44444444444   15      deposit     in the output
55555555555   20      reversal    in the output
55555555555   10      deposit     in the output
66666666666   30      reversal    in the output no match

При чтении типа разворота должен следовать депозит с той же суммой, в этом случае в выходном файле не должно быть записи разворота и депозита. Возможна неодинаковая сумма по развороту и депозиту, в этом случае в выходном файле должны быть обе записи.

выход

33333333333   20      deposit
44444444444   15      deposit
55555555555   20      reversal   
55555555555   10      deposit     
66666666666   30      reversal     

person user3127986    schedule 01.09.2015    source источник


Ответы (1)


да. Пока ваш SyncSORT достаточно актуален.

Вам нужно использовать JOINKEYS. Укажите один и тот же DSN для обоих входных наборов данных и укажите, что они СОРТИРОВАНЫ. Существует недокументированная функция, позволяющая использовать файлы JNFnCTNL, такие как DFSORT.

В JNF1CNTL (который является «препроцессором» для первого набора данных JOINKEYS) временно добавьте порядковый номер к каждой записи. По умолчанию последовательность начинается с единицы. Здесь полезно быть явным...

Потому что в JNF2CNTL вы хотите сделать то же самое, но начать последовательность с нуля (START=0).

Ключом для каждого из JOINKEYS является порядковый номер.

Используйте ПРИСОЕДИНИТЬСЯ К НЕПАРАМ, F1. Определите REFORMAT со всеми данными из первого файла и данными для сравнения из второго файла.

Вот как будет выглядеть набор данных из четырех записей, если вы представите соединение:

- - A 0
A 1 B 1
B 2 C 2
C 3 D 3
D 3 - - 

Поскольку вы укажете JOIN UNPAIRED,F1, вы фактически не увидите несоответствие A 0 (потому что оно находится на F2), но вы увидите несоответствие D 3.

Если вы посмотрите на свою запись REFORMAT, у вас теперь есть данные из «текущей» записи и данные из «следующей» записи.

Затем нужно немного поработать, чтобы выбрать только те записи, которые вам нужны. Но сначала ужин...

person Bill Woodger    schedule 01.09.2015
comment
Привет Билл, спасибо за ваш ответ. У вас есть какой-нибудь пример этого где-нибудь в (документации ibm icetool или syncsort)? Было бы здорово не писать код на COBOL!!! - person user3127986; 01.09.2015