This is the IDCAMS version: /* REXX Mainframe Week - Code */ /* */ /* A REXX routine to convert PDS to sequential datasets */ /* */
/* -------------------- REXX ** ------------------- */ /* Syntax for expds: */ /* %pdstoseq hlq.pdsname off */ /* ------------------------------------------------ */ ARG libparm ver IF ver = ON THEN TRACE ALL user = USERID() SAY 'Enter DSN qualifier ' PULL seqfile temp_grc = "00" tot_mem = 0 CALL read_dir CALL all_utl DO I = 7 TO libmem.0 MEMBER = STRIP(libmem.I) CALL copy_mem END CALL end_expds /* ------------------------ */ all_utl: "LISTDS '"user"."SEQFILE".EXPDS'" IF RC = 0 THEN DO " DEL '"user"."SEQFILE".EXPDS'" END " ALLOC FI(OUT) DA('"user"."SEQFILE".EXPDS') MOD CATALOG", " RECFM (F B) DSORG(PS) SP(10 10) CYL ", " LRECL(80) BLKSIZE(8000) UNIT(3390) " IF RC > 0 THEN DO temp_rc = RC temp_ftc = "ALLOC ERROR" CALL rou_rc END RETURN copy_mem: tot_mem = tot_mem + 1 ROUT.0 = 1 ROUT.1 = "./ ADD LEVEL=00,SOURCE=0,NAME="MEMBER "EXECIO * DISKW OUT (FINIS STEM ROUT." IF RC > 0 THEN DO temp_rc = RC temp_ftc = "EXECIO ERROR" CALL rou_rc END " REPRO INDATASET('"libparm"("MEMBER")' ) OUTFILE(OUT) " IF RC > 0 THEN DO temp_rc = RC temp_ftc = "REPRO ERROR" CALL rou_rc END RETURN read_dir: X = OUTTRAP("libmem.") "LISTDS '"libparm"' M" IF RC > 0 THEN DO temp_rc = RC temp_ftc = "LISTDS ERROR" CALL rou_rc END X = OUTTRAP("OFF") IF libmem.0 < 8 THEN DO temp_ftc = "PDS IS EMPTY" temp_rc = 4 CALL rou_rc END RETURN rou_rc: IF temp_rc > 0 THEN temp_grc = temp_rc SAY " > ERROR < " SAY " > FUNCTION/REXX < " temp_ftc SAY " > RETURN CODE < " temp_rc temp_rc = 0 temp_ftc = "" CALL end_expds RETURN end_expds: " FREE DATASET('"user"."SEQFILE".EXPDS')" IF temp_grc = 0 THEN DO SAY "MEMBERS SUCCESSFULLY PROCESSED: "tot_mem END EXIT temp_grc On Thu, May 28, 2020 at 11:13 AM Wayne Bickerdike <wayn...@gmail.com> wrote: > I have used REXX to do this. One flavour uses IDCAMS REPRO, the other uses > EXECIO. > > It builds the member list from a LISTDS MEMBERS. > > It adds ./ADD IEBUPDTE statements to the flat file in order to move to > other systems. It's a readable option compared to using XMIT on a PDS> > > > > On Thu, May 28, 2020 at 11:05 AM Lizette Koehler <stars...@mindspring.com> > wrote: > >> Personally I would use REXX and LM functions to read through PDS members >> and >> action them. >> >> I did that when I needed to update all Members in a PDS to insert some >> additional control cards >> >> REXX with ISPF LM (Library Management) functions work very well for this. >> >> Lizette >> >> >> -----Original Message----- >> From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf >> Of >> Sri h Kolusu >> Sent: Wednesday, May 27, 2020 3:08 PM >> To: IBM-MAIN@LISTSERV.UA.EDU >> Subject: Re: Sort extracting values in PDS members >> >> ITschak, >> >> I already responded to this topic. Not sure where it went, but I did >> respond >> before your email. You can use IEPTPCH to flatten the PDS to a sequential >> file. If you use STOPAFT=5 then it will only print the 5 lines of the PDS. >> So don't have to use SUPERC >> >> Thanks, >> Kolusu >> DFSORT Development >> IBM Corporation >> >> IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> wrote on >> 05/27/2020 02:50:28 PM: >> >> > From: ITschak Mugzach <imugz...@gmail.com> >> > To: IBM-MAIN@LISTSERV.UA.EDU >> > Date: 05/27/2020 02:51 PM >> > Subject: [EXTERNAL] Re: Sort extracting values in PDS members Sent by: >> > IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> >> > >> > I would start with creating a single file using a ISRSUPC (it works >> outside >> > of ISPF, try opt 3.14 background option to generate the JCL) searching >> for >> > the two keywords you are looking for. >> > >> > ITschak >> > ITschak Mugzach >> > *|** IronSphere Platform* *|* *Information Security Continuous >> > Monitoring for z/OS, x/Linux & IBM I **| z/VM comming son * >> > >> > >> > >> > >> > On Wed, May 27, 2020 at 11:41 PM Billy Ashton <bill00ash...@gmail.com> >> > wrote: >> > >> > > Hi again! This group has been so helpful - especially Kolusu - and I >> > > have one more question as I learn how to use SORT more creatively. >> > > >> > > I have a bunch of PDS files where I have to read through each member >> and >> > > create some control cards based on the content in the member (due to >> the >> > > nature of these files, the request needs to be vague). So here are >> > > the >> > > questions: >> > > 1. Is there a way to automatically read all members of a PDS? If >> > > not, I can generate the individual file names with member in a >> > > separate process. >> > > 2. When I read each member, I will be looking for KEYWORD(value) - >> > > the keyword will be either "KEYWORD1" or "LONGKEYWORD2" and will be >> > > within the first 5 lines of the member, at which point I stop >> > > reading (some of the members have 25000 lines!), and the Keyword >> > > could be anywhere on >> the >> > > line, in column 1 or with a space delimiter. Keyword can be 8 or 12 >> > > characters long, and Value can be 2 to 8 characters. >> > > 3. I then need to create a string of -ADD- Value.Keyword.Dyyyymmdd >> > > (Today's date) that I will use in my further processing. >> > > >> > > Note that I could write a program to manage this, but am trying to >> > > keep the processing in a control member rather than a program, as >> > > utility programs seem to get lost around here. >> > > >> > > Since I can't show you the real input, here is some contrived data: >> > > >> > > Member1: >> > > KEYWORD1(val) Otherkw(val) Otherkey2(anothervalue) >> > > Line2 >> > > Line3 >> > > etc. >> > > >> > > Member 2: >> > > Line 1 >> > > Line 2 >> > > Otherkw(val) Otherkw2(val) LONGKEYWORD2(longvalu) Otherkw3(val) etc. >> > > >> > > Member 3: >> > > Line 1 >> > > Otherkw1(withitslongvalue) LONGKEYWORD2(valu) Line 3 etc. >> > > >> > > Member 4: >> > > Line 1 >> > > Line 2 >> > > Line 3 >> > > Line4 >> > > KW(val) Anotherkw(anditsvalue) Alongkeywordhere(withalongvalue) >> > > KEYWORD1(va) >> > > etc. >> > > >> > > This would create the output (either in a single MOD file, or >> > > separate files I can put together myself: >> > > VAL.KEYWORD1.D20200527 >> > > LONGVALU.LONGKEYWORD2.D20200527 >> > > VALU.LONGKEYWORD2.D20200527 >> > > VA.KEYWORD1.D20200527 >> > > >> > > Can something like this be done in a DFSORT step? If not, I can >> > > write the various utilities myself in Rexx and/or COBOL, so you >> > > don't need to suggest that. >> > > >> > > Thanks for your help once more! >> > > Billy >> > > >> > > -------------------------------------------------------------------- >> > > -- For IBM-MAIN subscribe / signoff / archive access instructions, >> > > send email to lists...@listserv.ua.edu with the message: INFO >> > > IBM-MAIN >> > > >> > >> > ---------------------------------------------------------------------- >> > For IBM-MAIN subscribe / signoff / archive access instructions, send >> > email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN >> > >> >> ---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, send email >> to lists...@listserv.ua.edu with the message: INFO IBM-MAIN >> >> ---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, >> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN >> > > > -- > Wayne V. Bickerdike > > -- Wayne V. Bickerdike ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN