Frage

Angenommen, ich habe 12 Positionen eines Datensatzhaltezeitfelds von 8 Bytes.Kann ich es mit dem aktuellen Zeitstempel vergleichen?Kann ich in diesem Feld arithmetische Operationen durchführen, z. B. eine Stunde addieren oder einige Minuten subtrahieren usw.Ihre Antworten werden sehr geschätzt.Danke!

Nachtrag..Zum besseren Verständnis:

Ich benötige Ihre Hilfe beim Vergleichen von Zeitfeldern beim Schreiben von Datensätzen aus der Ausgabe.Zum Beispiel habe ich an der 12. Stelle der Datei einen Zeitstempel von 8 Byte.Ich möchte in die Ausgabe schreiben, wenn der Zeitstempel im Datensatz um eine Stunde kleiner oder gleich dem aktuellen Zeitstempel ist.Auf dem Weg dorthin blieb ich bei Folgendem hängen:

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

Was könnte die Datendarstellung sein (anstelle von ?? dafür.)

Können wir das vor allem mit SORT erreichen?Wenn ja, geben Sie mir bitte die SORT-Karte (ändern Sie meine Karte, wenn möglich, andernfalls geben Sie mir Ihre Version).Und bitte teilen Sie auch das Material/Repo mit, um Zeit- und Datumsvergleiche und eine bessere Handhabung zu ermöglichen.Vielen Dank im Voraus für Hilfe.

Grüße, Raja.

War es hilfreich?

Lösung

Ich denke, ich sehe, was Sie versuchen, habe aber Zweifel, ob es funktionieren wird.Das sind meine Gedanken:

  • Ich habe das bisher nur gesehen &TIME1(c) Zeichenkette, die für die Ausgabe verwendet wird.Zum Beispiel: OUTREC BUILD(1,11,12,&TIME1(:))fügt die aktuelle Uhrzeit im Format HH:MM:SS ab Position 12 in den Ausgabedatensatz ein.Nach dem Besten meines Wissens, ZEIT kann nicht in einem ICETOOL/DFSORT verwendet werden COND Aussage, wie Sie in Ihrer Frage angegeben haben.
  • Selbst wenn ZEIT wurden darin unterstützt COND Aussagen, die +/- Operatoren werden nicht wie Sie vielleicht gesehen, wie Sie es gesehen haben könnten DATUM (z.B. DATUM1+1 um das aktuelle Datum plus 1 Tag zu erhalten).Hinzufügen einer Konstante zu a ZEITwird nicht unterstützt.
  • Haben Sie darüber nachgedacht, was passieren würde, wenn Ihre Aufgabe einige Minuten vor Mitternacht laufen würde?Das Hinzufügen einer Stunde zur Zeit führt zu einem Rollover auf den Morgen des nächsten Tages.Zu diesem Zeitpunkt müssen Sie das Datum in die Verbreitung in der Kondition einnehmen.

Etwas, das funktionieren könnte:Fügen Sie einen Vorschritt hinzu, um ein REXX-Programm oder ein anderes Programm auszuführen.Lassen Sie dieses Programm alle oder einen Teil der generierenENTHALTEN Anweisungen, die in einem nachfolgenden ICETOOL-Schritt verwendet werden.Hier ist ein Beispiel für eine Rexx -Prozedur, die eine erstellt ENTHALTEN Aussage, die der in Ihrer Frage ähnelt.Der Datensatz wird in die Datei geschrieben, die DD CNTLREC zugewiesen wurde:

 /* 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

Weisen Sie diese Datei der entsprechenden ICETOOL-Steueranweisungs-DD zu und es sollte für Sie funktionieren.

Warnung: Dieses Beispiel befasst sich nicht mit Anpassungen, die bei den Cond -Parametern im Falle eines Überschlags Mitternacht möglicherweise erforderlich sind.

Notiz: Wenn Sie die obige REXX-Prozedur in einem PDS gespeichert haben als:"My.rexx (foo)", deine Pre-Step-JCL würde ungefähr aussehen wie:

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

Die „1“ nach %FOO ist die DELTA-Stundenanzahl, auf die in der Prozedur verwiesen wird.

Andere Tipps

Wenn Ihre DFSORT im Oktober 2010 ziemlich auf dem neuesten Stand ist, hat Datum5 das Äquivalent von Datum4, jedoch Mikrosekunden, also wie ein DB2-Zeitstempel.

 OPTION COPY
 INREC OVERLAY=(1:DATE5)

gibt

2013-04-08-19.29.41.261377
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top