MainframeSupports
tip uge 49/2005:

I den forløbne uge har jeg fået to henvendelser om, hvordan man omformer et PDS (et dataset med members) til en flad fil (sekventielt dataset). Derfor dette tip. Der findes flere mere eller mindre elegante måder at gøre det på. Man kan selv skrue et eller andet sammen, men egentlig burde IBM for længst have lavet en utility, der kan gøre det for dig.

Det har IBM faktisk også, men det er ikke ligefrem noget de render rundt og reklamerer med. I manualen DFSMS Utilities er der beskrevet et program kaldet IEBPTPCH som rent faktisk let og elegant løser opgaven. Men der er visse grunde til at der ikke bliver reklameret så meget med IEBPTPCH. Det er fyldt med mystiske begrænsninger, som i år 2005 virker direkte oldnordiske. Pyt med det, hvis dit PDS har en LRECL på 80, så er du ret godt kørende med følgende stykke JCL:

//PRINT EXEC PGM=IEBPTPCH
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=SHR,DSN=MY.WONDER.FUL.PDS
//SYSUT2 DD DISP=(NEW,CATLG),SPACE=(TRK,(99,99),RLSE),
// DSN=MY.FLAT.FILE,BLKSIZE=27945,LRECL=81
//SYSIN DD *
PUNCH TYPORG=PO
/*

MY.FLAT.FILE skal allokeres med en LRECL, der er 1 større end PDS'et, da IEBPTPCH desværre sætter et såkaldt ASA-tegn ind foran hver eneste record. Det kan du i et efterfølgende step let fjerne med DFSORT. Steppet vil unloade samtlige members i MY.WONDER.FUL.PDS og skrive dem ud concateneret sammen til en lang flad fil i MY.FLAT.FILE. Før data i hvert enkelt member udskriver IEBPTPCH en record med navnet på det efterfølgende member. Man kan således altid finde ud af hvilket member, man befinder sig i, når man efterfølgende behandler den flade fil.

Jeg har med stor succes anvendt IEBPTPCH til at unloade PDS'er til UNIX og WINDOWS med FTP. Med FTP er man desværre nødt til at overføre et member ad gangen og det er et større cirkus at sætte noget fornuftigt op til den slags overførsler. Så er det noget nemmere at overføre en enkelt fil.

Forrige danske tip        Last tip in english        Tip oversigten