MainframeSupports
tip uge 13/2008:

Helt tilbage i uge 24/2000 skrev jeg et tip om hvordan man kan ændre i data ved hjælp DFSORT. I mellemtiden er der kommet en ny version af DFSORT, som netop har forbedret mulighederne for at ændre i data betydeligt. Statement typerne INREC, OUTREC og OUTFIL har fået tilføjet nye options kaldet OVERLAY og IFTHEN.

Med udgangspunkt i mit tidligere tip vil jeg omskrive eksemplet herfra til at bruge OVERLAY og IFTHEN:

//MYCHANGE EXEC PGM=SORT
//SORTIN   DD DISP=SHR,DSN=MY.ORIGINAL.DATA
//SORTOUT  DD DISP=SHR,DSN=MY.CHANGED.DATA
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  SORT FIELDS=COPY
  OUTREC IFTHEN=(WHEN=(51,4,CH,EQ,C'0600'),OVERLAY=(51:C'0700'),HIT=NEXT),
         IFTHEN=(WHEN=(51,4,CH,NE,C'0600'),OVERLAY=(51:C'0800'),HIT=NEXT),
         IFTHEN=(WHEN=(59,8,CH,EQ,C'SOMENAME'),OVERLAY=(59:C'OTHRNAME')),
         IFTHEN=(WHEN=(59,8,CH,EQ,C'THISNAME'),OVERLAY=(59:C'OTHRNAME')),
         IFTHEN=(WHEN=(59,8,CH,EQ,C'FRANCE03'),OVERLAY=(59:C'DENMARK0'))
/*

For det første er det ikke længere nødvendigt at benytte OUTFIL for at få adgang til de mere interessante funktioner i OUTREC og INREC. For det andet behøver man ikke længere at opbygge hele recorden. Det sørger OVERLAY for. OVERLAY kan benyttes uden IFTHEN, så hvis du skal have erstattet position 11 til 14 med XXXX, så kan det klares med OUTREC OVERLAY=(11:C'XXXX'). OVERLAY overskriver kun udvalgte dele af recorden med data, mens de øvrige data er uforandrede. For det tredie er det nemmere at overskue, hvad der rent faktisk foregår. IFTHEN er i mine øjne lettere at gennemskue. Bemærk, at OVERLAY i IFTHEN sagtens kan ændre nogle andre positioner end dem, som betingelsen tester.

En pudsig detalje i IFTHEN er HIT=NEXT. Med HIT=NEXT, vil de efterfølgende IFTHEN blive evalueret selvom den pågældende IFTHEN er opfyldt. Der er endnu flere muligheder med IFTHEN, som du kan læse om i DFSORT Application programming guide.

Forrige danske tip        Last tip in english        Tip oversigten