MainframeSupports
tip uge 13/2012:

Vidste du, at SORT kan konvertere binære og pakkede felter til læsbare tal? Det vidste jeg ikke. Men det er faktisk ret nemt at få SORT til at foretage disse konverteringer. Det gør det ulige nemmere at læse en fil med en masse binære og pakkede felter ved lige at sende den en tur gennem SORT.

Forestil dig en fil med et 10-cifret kundenummer gemt som et pakket felt svarende til en FIXED DECIMAL(10) i PL/I, DECIMAL(10) i DB2 eller PIC 9(10) COMP-3/DECIMAL i COBOL efterfulgt af et antal transaktioner gemt som et binært felt svarende til en FIXED BINARY(31) i PL/I, INTEGER i DB2 eller PIC S9(9) COMP/BINARY i COBOL. Det kan være det rene nonsens at læse og svært at søge i med FIND i ISPF EDIT, med mindre du holder af at konvertere til hexadecimalt og er ekspert i den interne repræsentation af pakkede felter. Du kan i stedet sende filen igennem følgende SORT step:

//NUM2READ EXEC PGM=SORT
//SORTIN   DD DISP=SHR,DSN=MY.CUSTOMER.FILE
//SORTOUT  DD DISP=(NEW,CATLG),SPACE=(TRK,(99,99),RLSE),
//         DSN=MY.READABLE.FILE
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  SORT FIELDS=COPY
  OUTREC FIELDS=(C'CUST.NO=',
                 1,6,PD,TO=ZD,LENGTH=10,
                 C' TRANS.COUNT=',
                 7,4,BI,TO=ZD,LENGTH=10)
/*

Hver record i MY.READABLE.FILE ser således ud:

CUST.NO=9999999999 TRANS.COUNT=9999999999

Jeg håber, du er med på, hvordan OUTREC fungerer i hovedtræk, ellers klik her. Bemærk, at OUTREC også har en funktion, der hedder EDIT, som kan anvendes til at lave endne finere formateringer end den her demonstrerede. For eksempel vil negative tal ikke have et pænt minus foran, men i stedet lave det sidste ciffer om til et bogstav eller et specialtegn. Og et decimalkomma kan slet ikke laves med mindre du benytter EDIT.

Forrige danske tip        Last tip in english        Tip oversigten