Получить только номер записи. x с помощью dfsort в JCL

У меня есть набор данных с несколькими строками данных, мне нужно что-то сделать с некоторыми из этих строк (не со всеми, и нет логики, позволяющей их выбрать), у меня есть список номеров строк, которые нужно выбрать и это слишком большой список, чтобы копировать их все вручную.

Кто-нибудь знает команду dfsort, которая, например, может получать записи из этого бита данных:

parameter10000500006
parameter20000100002
parameter30000400007
parameter40000000006
parameter50000100001
parameter60000500012
parameter70000700013

И вернет мне только 2-й и 3-й, например, вот так:

parameter20000100002
parameter30000400007

person Jeremy C.    schedule 13.07.2015    source источник
comment
Я нашел что-то вроде startrec и endrec, но не знаю, как это использовать   -  person Jeremy C.    schedule 13.07.2015


Ответы (2)


Если вы хотите сделать это по одному, лучше использовать OPTION SKIPREC=1,STOPAFT=2:

 OPTION SKIPREC=1,STOPAFT=2,COPY

В своем ответе вы просто показываете простой оператор OUTFIL, начиная с первого столбца. Все операторы SORT должны начинаться после первого столбца. Всегда должны быть явные или неявные операции SORT, MERGE или COPY, иначе ваш шаг завершится ошибкой.

Операция COPY может быть указана как OPTION COPY или SORT FIELDS=COPY или MERGE FIELDS=COPY.

Причина, по которой это лучше делать в операторе OPTION, заключается в том, что данные удаляются/включаются в самый ранний возможный момент.

Если бы у вас, например, была операция SORT (не COPY), то ваше решение OUTFIL по-прежнему работало бы, но вы бы отсортировали весь файл, прежде чем дойдете до окончательного исключения.

STARTREC и ENDREC обычно видны, когда SKIPREC и STOPAFT нельзя использовать для вашей задачи, потому что происходит SORT или MERGE (поэтому вы не знаете, какая запись будет первой в новых данных).

В наборах данных мэйнфреймов у нас нет «строк» ​​данных, у нас есть записи. Вас смутит, если вы обратитесь к документации о том, как работать со "строками", потому что за пределами DB2 этот термин в лучшем случае ничего не будет означать, а в худшем - не то, что вы думаете.

person Bill Woodger    schedule 13.07.2015
comment
да, вы правы, перед этим у меня был шаг сортировки, я отредактирую свой ответ - person Jeremy C.; 13.07.2015
comment
@JeremyC, вы хотите сделать это сразу для нескольких вариантов? - person Bill Woodger; 13.07.2015
comment
на самом деле это не обязательно, у нас есть скрипт rexx, который может запускать этот jcl несколько раз, просто это нужно делать с течением времени (у нас есть несколько недель) все сразу заняло бы слишком много времени, мы делаем около 10 каждый день во время обеда, когда система менее загружена - person Jeremy C.; 13.07.2015
comment
Мне было интересно, не могли бы вы взглянуть на этот вопрос: column" title="dfsort findrep короткая строка с более длинной без перезаписи следующего столбца"> stackoverflow.com/questions/31381336/ вы, кажется, единственный человек прямо сейчас (то есть в сети), который немного знает о dfsort а может ты мне с этим поможешь - person Jeremy C.; 13.07.2015

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

Для записи 2 и 3 это может выглядеть примерно так:

//SYSIN DD *
 SORT FIELDS=(1,1,CH,A)
 OUTFIL STARTREC=2,ENDREC=3
/*
person Jeremy C.    schedule 13.07.2015
comment
Итак, вам нужны вторая и третья записи после того, как они были отсортированы? Не могли бы вы пояснить это в своем вопросе, пожалуйста? - person Bill Woodger; 13.07.2015