Text in einer Datei durch Konstante ersetzen

Mittels dieses SORT-Steps in einem Job, kann in einer Datei an einer bestimmten Stelle, ein Text durch eine Konstante ersetzt werden.

//S01SORT EXEC PROC=SORTX
//SORTIN DD DSN=USER.TEST.SORT,
// DISP=SHR
//SORTOUT DD DSN=USER.TEST.SORT.OUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=WRK,
// SPACE=(CYL,(160,50),RLSE),
// LRECL=407,RECFM=FB
//SYSIN DD *
INCLUDE COND(1,1,CH,EQ,C'0')
INREC FIELDS=(1,95,
C'ASTERIX UND OBELIX ',
X'00',
C'GALLIEN ',
X'00',
162,245)
SORT FIELDS=COPY

Die Include Condition stellt dabei die Bedingung dar. In diesem Beispiel werden Char-Strings und HEX-Werte als Konstante in die Datei eingestellt.

Mit ICETOOL Datensätze in Dateien zählen

Im Rahmen von Testaktivitäten ist immer wieder Vollständigkeit von Datensätzen in Datasets zu überprüfen. Mit dem DFSORT-Tool ICETOOL lassen sich auf einfache Art und Weise eine große Anzahlen von Dateien zählen. Mit der folgenden JCL kann dies in einem JOB auf bis 255 Dateien erweitert werden:

//NZSCNTAU JOB (666045,BA),                     
//         'MOELLER',                           
//         CLASS=K,                             
//         NOTIFY=&SYSUID,                      
//         MSGCLASS=T                           
//RESTART EXEC PGM=IEFBR14                      
//ALT     DD DSN=&SYSUID..NZSCOUNT.AUSUEB,      
//           DISP=(MOD,DELETE,DELETE)           
//        SET VAR1='$150529'                    
//ICETOOL EXEC PGM=ICETOOL                      
//TOOLMSG DD SYSOUT=*                           
//DFSMSG  DD SYSOUT=*                           
//IN001   DD DSN=BAT.PO.&VAR1..ZH.AL.GDG.AUSUEB,
//           DISP=SHR                           
//OUT001  DD DSN=&SYSUID..NZSCOUNT.TMPAU,       
//           DISP=(MOD,CATLG,DELETE),           
//           RECFM=FB,                          
//           LRECL=80,                              
//           BLKSIZE=800,                           
//           SPACE=(80,(1,10000),RLSE)              
//TOOLIN  DD *                                      
COUNT FROM(IN001) WRITE(OUT001) -                   
TEXT('BAT.PO.&VAR1..ZH.AL.GDG.AUSUEB,            :')
/*                                                  
//ICETOOL EXEC PGM=ICETOOL                
//TOOLMSG DD SYSOUT=*                     
//DFSMSG  DD SYSOUT=*                     
//IN001   DD DSN=&SYSUID..NZSCOUNT.TMPAU, 
//           DISP=SHR                     
//OUT001  DD DSN=&SYSUID..NZSCOUNT.AUSUEB,
//           DISP=(MOD,CATLG,DELETE),     
//           RECFM=FB,                    
//           LRECL=80,                    
//           BLKSIZE=800,                 
//           SPACE=(80,(1,10000),RLSE)    
//TOOLIN  DD *                            
  DISPLAY FROM(IN001) LIST(OUT001) -      
  HEADER('DATEINAME') ON(1,35,CH) -       
  HEADER('ANZAHL RECORDS') ON(45,15,UFF) -
  TOTAL('SUMME AUSUEB: ')                 
/*                                        
//RESTART EXEC PGM=IEFBR14                
//ALT     DD DSN=&SYSUID..NZSCOUNT.TMPAU, 
//           DISP=(MOD,DELETE,DELETE)    )

Beschreibung der einzelnen Zeilen:

Zeile 01: Aufruf des Programmes ICETOOL

Zeile 02 und 03: Umleitung an die Standard-Ausgabe der Meldungen die durch das Programm ICETOOL und DFSORT erzeugt werden

Zeile 04 und 05: Einzulesende Datei (mit Variablennamen für das Fachbestandsdatum), DISP=SHR beschreibt lesenden Zugriff

Zeile 06 bis 11: Auszugebende Datei (mit System-Variablennamen für die User-ID), DISP=(MOD,CATLG,DELETE) beschreibt den schreibenden Zugriff auf eine bereits vorhandene Datei. Jede Ergebniszeile wird an die vorhandene Datei unten angehängt. Achtung: Die erzeugte Datei ist eine temporäre Datei, die im letzten Step des Jobs wieder gelöscht wird. Im letzten Step des Jobs wird aus jeder temporären Datei die Summe je Entität berechnet und in die endgültige Ausgabedatei geschrieben.

Zeile 12 bis 14: Hierbei handelt es sich um die Eingabeparameter für das Programm ICETOOL. COUNT zählt aus der und IN001 angegebenen Datei und schreibt unter die mit OUT001 benannte Datei. Das Minuszeichen am Ende der Zeile ist der Identifikator für eine weitere Parameter-Zeile. TEXT gibt einen konstanten String aus (in diesem Fall den Namen der einzulesenden Datei)

Beschreibung des Outputs

Je Job/Entität wird unter der eigenen User-ID eine Ausgabedatei erzeugt. Jedes Ausgabedatei enthält zwei Spalten (Spalte 1 = Dateiname, Spalte 2 = Anzahl der Zeilen je Datei) und eine Summenzeile.

Beispiel (Auszug):

DATEINAME                             ANZAHL RECORDS
---------------------------------   ----------------
BAT.PO.&VAR1..ZH.AL.GDG.AUSUEB,     +000000000000000
BAT.PO.&VAR1..ZH.A2.GDG.AUSUEB,     +000000000007468
BAT.PO.&VAR1..ZH.BL.GDG.AUSUEB,     +000000000000000
BAT.PO.&VAR1..ZH.DR.GDG.AUSUEB,     +000000000027352
…
SUMME AUSUEB:                       +000000000161479