1

8 バイトの時間フィールドを保持するレコードの位置が 12 あるとします。現在のタイムスタンプと比較できますか? そのフィールドで、1 時間を加算したり、数分を減算したりするなどの算術演算を行うことはできますか。回答をいただければ幸いです。ありがとう!

補遺..理解を深めるために:

出力からレコードを書き込んでいるときに、時間フィールドを比較するのに助けが必要です。たとえば、8 バイトのタイムスタンプを保持しているファイルの 12 番目の位置があります。レコードのタイムスタンプが現在のタイムスタンプよりも 1 時間小さいか等しい場合に、出力に書き込みたいと考えています。これを達成する過程で、私は以下で立ち往生しました:

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

データ表現は何ですか(??これの代わりに。)

まず、SORT を使用してこれを達成できますか? もしそうなら、SORTカードをください(可能であれば私のカードを修正してください。さもなければあなたのバージョンを教えてください)。また、時間と日付の比較とより良い取り扱いに関する資料/レポを共有してください。助けてくれてありがとう。

よろしく、ラジャ。

4

2 に答える 2

1

あなたがやろうとしていることはわかると思いますが、うまくいくかどうかは疑問です。これらは私の考えです:

  • 出力に使用される&TIME1(c)文字列しか見たことがありません。例: OUTREC BUILD(1,11,12,& TIME1 (:)) は、現在の時刻を HH:MM:SS 形式で、位置 12 から始まる出力レコードに配置します。質問で示したように、ICETOOL/DFSORT CONDステートメント。
  • CONDステートメント内でTIMEがサポートされていたとしても、 DATEで見られたように +/- 演算子はサポートされていません(たとえば、現在の日付に 1 日を加えた日付を取得するDATE1+1 )。TIMEへの定数の追加 はサポートされていません。
  • 真夜中の数分前にジョブが実行されたらどうなるか、考えたことはありますか? 時刻に 1 時間を追加すると、翌日の朝に繰り越されます。その時点で、COND で日付を考慮に入れる必要があります。

動作する可能性のあるもの: REXX またはその他のプログラムを実行するための事前ステップを追加します。このプログラムで、後続の ICETOOL ステップで使用されるINCLUDEステートメントのすべてまたは一部を生成し ます。以下は、質問で指定されたものと同様のINCLUDEステートメントを作成する REXX プロシージャーの例です。レコードは、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 プロシージャーを「MY.REXX(FOO)」として PDS に保管した場合、プレステップ JCL は次のようになります。

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

%FOO に続く '1' は、手順で参照される DELTA 時間数です。

于 2010-10-01T17:09:41.730 に答える