можем ли мы сравнить поля времени в карте SORT JCL

Предположим, у меня есть 12 позиций поля времени хранения записи размером 8 байт. Могу ли я сравнить его с текущей меткой времени? Могу ли я выполнять арифметические операции с этим полем, такие как добавление часа или вычитание нескольких минут и т. д. Ваши ответы будут высоко оценены. Спасибо!

Дополнение... для лучшего понимания:

Мне нужна ваша помощь в сравнении полей времени при записи записей из вывода. Например, у меня есть 12-я позиция временной метки файла размером 8 байт. Я хочу записать вывод, когда отметка времени на записи меньше или равна текущей отметке времени на час. В процессе достижения этого я застрял ниже:

INCLUDE COND=(12,8,??,GE,&TIME1-1),

каким может быть представление данных (вместо ?? для этого.)

Прежде всего, мы можем добиться этого с помощью SORT? Если да, пожалуйста, дайте мне карточку SORT (исправьте мою карточку, если это возможно, в противном случае дайте мне свою версию). А также, пожалуйста, поделитесь материалом / репозиторием по сравнению времени и даты и лучшей обработке. Заранее спасибо за помощь.

С уважением, Раджа.


person Raja Reddy    schedule 29.09.2010    source источник
comment
Мне трудно понять ваш вопрос. Вы пытаетесь сравнить данные в каждой записи с отметкой времени, сгенерированной для этой записи во время сортировки? Это очень странное требование. Было бы полезно, если бы вы предоставили немного больше информации здесь.   -  person NealB    schedule 29.09.2010
comment
Да! ты почти рядом. У меня есть метка времени на каждой записи, и ее нужно сравнить с меткой во время SORT. Чтобы быть более ясным, я отредактировал вопрос. Пожалуйста, дайте мне знать, если вы все еще найдете какие-либо пробелы в объяснении. Спасибо за интерес.   -  person Raja Reddy    schedule 30.09.2010


Ответы (2)


Я думаю, вижу, что вы пытаетесь сделать, но сомневаетесь, сработает ли это. Это мои мысли:

  • Я только когда-либо видел строку символов &TIME1(c), используемую для вывода. Например: OUTREC BUILD(1,11,12,&TIME1(:)) поместит текущее время в формате ЧЧ:ММ:СС в выходную запись, начиная с позиции 12. Насколько я знаю knowedge, TIME нельзя использовать в операторе ICETOOL/DFSORT COND, как вы указали в своем вопросе.
  • Даже если TIME поддерживалось в операторах COND, операторы +/- не поддерживаются, как вы могли видеть с DATE (например, >DATE1+1, чтобы получить текущую дату плюс 1 день). Добавление некоторой константы к TIME не поддерживается.
  • Думали ли вы о том, что произойдет, если ваша работа будет выполняться за несколько минут до полуночи? Добавление часа ко времени приводит к переносу времени на утро следующего дня. В этот момент вам нужно учесть дату в COND.

Что-то, что может сработать: добавьте предварительный шаг для запуска REXX или какой-либо другой программы. Пусть эта программа сгенерирует все или часть операторов INCLUDE, используемых на последующем шаге ICETOOL. Вот пример процедуры REXX, которая создаст оператор INCLUDE, аналогичный тому, который указан в вашем вопросе. Запись записывается в файл, выделенный для DD CNTLREC:

 /* REXX */
 PULL DELTA  /* Number of hours to add to current time */
 PARSE VALUE TIME('N') WITH HH ':' MM ':' SS /* current time */
 HH = LEFT((HH + DELTA) // 24, 2, '0')  /* add DELTA, check rollover */
 QUEUE " INCLUDE COND=(12,8,CH,GE,C'"HH":"MM":"SS"'),"
 EXECIO * DISKR CNTLREC(FINIS
 EXIT

Назначьте этот файл соответствующему управляющему оператору ICETOOL DD, и он должен работать на вас.

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

Примечание. Если вы сохранили указанную выше процедуру REXX в PDS как "MY.REXX(FOO)", ваш предварительный JCL-код будет выглядеть примерно так:

//RUNREXX   EXEC PGM=IKJEFT01           
//SYSEXEC  DD DSN=MY.REXX,DISP=SHR  
//SYSTSPRT DD SYSOUT=A                  
//SYSTSIN  DD *                         
%FOO
1                               
/*                                      
//

«1» после %FOO — это количество часов DELTA, указанное в процедуре.

person NealB    schedule 01.10.2010

Если ваш DFSORT довольно актуален, октябрь 2010 г., DATE5 будет иметь эквивалент DATE4, но включая микросекунды, так что это похоже на «метку времени» DB2.

 OPTION COPY
 INREC OVERLAY=(1:DATE5)

дает

2013-04-08-19.29.41.261377
person Bill Woodger    schedule 08.04.2013
comment
о, я попробую, и есть идеи, получим ли мы одно и то же значение без разделителей? Спасибо за ваше время и интерес, Билл. :) - person Raja Reddy; 16.04.2013
comment
Извините, только сейчас наткнулся на комментарий. Существуют различные способы избавиться от символов редактирования. Если вам все еще нужно что-то для этого, отредактируйте свой вопрос. - person Bill Woodger; 16.10.2013