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

Я хочу удалить 501 запись на основе 5-символьного кода активности из тестового файла с 38 792 записями.

Поскольку есть 501 запись, я не могу написать условие пропуска.

Мне нужно использовать карту соединения сортировки, но моя проблема заключается в том, что этот 5-символьный код активности начинается с 46-го столбца для некоторых записей и 47-го столбца для других.

Так что я могу сделать?


person user3917012    schedule 07.08.2014    source источник
comment
Есть ли причина, по которой вы не можете использовать или / и, чтобы сделать сложное включение / опустить или, альтернативно, использовать дополнительные поля в тесте ???   -  person Bruce Martin    schedule 07.08.2014


Ответы (1)


Вопрос неясен, многие детали отсутствуют, но вот что может помочь другому искателю:

 //SYSIN DD *

  JOINKEYS F1=INA,FIELDS=(1,5,A),SORTED,NOSEQCK
  JOINKEYS F2=INB,FIELDS=(1,5,A) 

  JOIN UNPAIRED,F1 

  REFORMAT FIELDS=(F1:1,80,?) 

  OPTION COPY 

  INREC IFTHEN=(WHEN=(81,1,CH,EQ,C'B'), 
                OVERLAY=(82:SEQNUM,9,ZD)) 

  OUTFIL OMIT=(82,9,CH,LE,C'000000501', 
              AND, 
               81,1,CH,EQ,C'B') 

//JNF2CNTL DD * 
  INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'0'), 
                BUILD=(3,5)), 
        IFTHEN=(WHEN=NONE, 
                BUILD=(2,5)) 
//INA      DD * 
11111 IN 
22222 KEEP UNMATCHED 
33333 OUT 
66666 IN 
66667 KEEP UNMATCHED 
66668 KEEP UNMATCHED 
77777 OUT 
88888 SHAKE IT ALL ABOUT 
//INB      DD * 
0X11111 
0X66666 
0X88888 
133333 
799999 
877777 

Это использует два входных файла, INA и INB.

INA уже находится в последовательности (поэтому укажите для нее SORTED,NOSEQCHK в JOINKEYS) и содержит 80-байтовые записи фиксированной длины.

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

В JNF2CNTL извлекается только ключ из второго файла, поскольку никаких других данных из этого файла не требуется. Ключ берется из разных мест в зависимости от типа записи. Файл будет отсортирован автоматически (с установленным OPTION EQUALS) перед самим JOIN.

JOIN предназначен для совпадений и непревзойденных записей из F1 (INA).

? в операторе REFORMAT является «маркером совпадения», и он будет автоматически установлен на B (оба) для совпадения и 1 (в этом случае возможен только один из-за ONLY в операторе JOIN) для несовпадающей записи из F1 .

Из тех, которые совпадают, вы хотите игнорировать первые 501. Итак, установите порядковый номер, который увеличивается только для совпадающих записей.

Затем в OUTFIL OMIT= для тех совпадающих записей, последовательность которых меньше или равна 501 счетчику.

Выводом SORTOUT будут все записи из файла INA, кроме первых 501 совпадающих.

person Bill Woodger    schedule 10.08.2014