Thanks Kolusu! It seems so easy when you (and Norbert) explains! :) Of course I should RTFM, but when you are ignorant it takes time find the relevant pieces.
(I wonder how many work hours the help here at IBM-MAIN have saved?) Best Regards, Thomas Berg ___________________________________________________________________ Thomas Berg Specialist zOS/RQM/IT Delivery Swedbank AB (Publ) > -----Original Message----- > From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On > Behalf Of Sri h > Kolusu > Sent: Thursday, October 23, 2014 6:09 PM > To: IBM-MAIN@LISTSERV.UA.EDU > Subject: Re: DFSORT/ICETOOL pondering > > Thomas, > > As others have explained it is quite simple to get the desired results. I > am showing examples for both FB and VB files using symbols. With symbols > you have the flexibility of changing it and then not worry about changing > the control cards. > > A brief explanation of the job. > > 1. The first IFTHEN with WHEN=INIT, we will number all records in the file > with a 8 byte sequence number. > > 2. The next 2 IFTHEN statements will validate that sequence number and > build the record. If you have more ranges then you can add IFTHEN > statements before the last IFTHEN with WHEN=NONE statement > > > //STEP0100 EXEC PGM=SORT > //SYSOUT DD SYSOUT=* > //SYMNOUT DD SYSOUT=* > //SYMNAMES DD * > FILE-REC-LENGTH,1,80,CH > RECORD-SEQ-NUMBER,*,8,ZD > REQD-DATA1,1,3,CH > REQD-DATA2,31,10,CH > REQD-DATA3,71,10,CH > RECD-SELECT-NUM1,5 > RECD-SELECT-NUM2,7 > RECD-SELECT-NUM3,9 > //SORTIN DD DISP=SHR,DSN=Your Input FB file > //SORTOUT DD SYSOUT=* > //SYSIN DD * > OPTION COPY > INREC IFTHEN=(WHEN=INIT,OVERLAY=(RECORD-SEQ-NUMBER:SEQNUM,8,ZD)), > > IFTHEN=(WHEN=(RECORD-SEQ-NUMBER,GT,RECD-SELECT-NUM1,AND, > RECORD-SEQ-NUMBER,LE,RECD-SELECT-NUM2), > BUILD=(REQD-DATA1,REQD-DATA2)), > > IFTHEN=(WHEN=(RECORD-SEQ-NUMBER,GT,RECD-SELECT-NUM2,AND, > RECORD-SEQ-NUMBER,LE,RECD-SELECT-NUM3), > BUILD=(REQD-DATA1,REQD-DATA2,REQD-DATA3)), > > IFTHEN=(WHEN=NONE,BUILD=(REQD-DATA2)) > > //* > > The above control cards will be translated as the following > > //SYSIN DD * > OPTION COPY > INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,8,ZD)), > > IFTHEN=(WHEN=(81,8,ZD,GT,5,AND,81,8,ZD,LE,7), > BUILD=(1,3,31,10)), > > IFTHEN=(WHEN=(81,8,ZD,GT,7,AND,81,8,ZD,LE,9), > BUILD=(1,3,31,10,71,10)), > > IFTHEN=(WHEN=NONE,BUILD=(31,10)) > //* > > If you have VB input files then you need to use sequencing of the records > right after the RDW. > > //STEP0200 EXEC PGM=SORT > //SYSOUT DD SYSOUT=* > //SYMNOUT DD SYSOUT=* > //SYMNAMES DD * > FILE-RDW,1,4,BI > RECORD-SEQ-NUMBER,*,8,ZD > VBDATA-SPOS,= > REQD-DATA1,*,3,CH > SKIP,27 > REQD-DATA2,*,10,CH > SKIP,30 > REQD-DATA3,*,10,CH > RECD-SELECT-NUM1,5 > RECD-SELECT-NUM2,7 > RECD-SELECT-NUM3,9 > //SORTIN DD DISP=SHR,DSN=Your Input VB File > //SORTOUT DD SYSOUT=* > //SYSIN DD * > OPTION COPY > INREC IFTHEN=(WHEN=INIT, > BUILD=(FILE-RDW,RECORD-SEQ-NUMBER:SEQNUM,8,ZD,VBDATA-SPOS)), > > IFTHEN=(WHEN=(RECORD-SEQ-NUMBER,GT,RECD-SELECT-NUM1,AND, > RECORD-SEQ-NUMBER,LE,RECD-SELECT-NUM2), > BUILD=(FILE-RDW,REQD-DATA1,REQD-DATA2)), > > IFTHEN=(WHEN=(RECORD-SEQ-NUMBER,GT,RECD-SELECT-NUM2,AND, > RECORD-SEQ-NUMBER,LE,RECD-SELECT-NUM3), > BUILD=(FILE-RDW,REQD-DATA1,REQD-DATA2,REQD-DATA3)), > > IFTHEN=(WHEN=NONE,BUILD=(FILE-RDW,REQD-DATA2)) > //* > > Further if you have any questions, please let me know > > Thanks, > Kolusu > DFSORT Development > > IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> wrote on > 10/23/2014 06:43:44 AM: > > > From: Thomas Berg <thomas.b...@swedbank.se> > > To: IBM-MAIN@LISTSERV.UA.EDU > > Date: 10/23/2014 06:44 AM > > Subject: Re: DFSORT/ICETOOL pondering > > Sent by: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> > > > > > -----Original Message----- > > > From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] > > > On Behalf Of Elardus Engelbrecht > > > Sent: Wednesday, October 22, 2014 3:52 PM > > > To: IBM-MAIN@LISTSERV.UA.EDU > > > Subject: Re: DFSORT/ICETOOL pondering > > > > > > Thomas Berg wrote: > > > > > > >Sometimes I have a need to do a selective copy of a dataset where the > > > selection is both record sequence and record position/part dependent. > > > >And by that I mean the record part/position is varying depending on > which > > > record it's about. > > > >An example (yes, it looks silly): > > > > > > Who ever gave you homework is silly... ;-D > > > > ...it's me... :) > > > > > >I want to copy position 31 to 40 of all records but from record > > 8 and 9 I want > > > to copy also (concatenate) position 71 to 80 and from record 6 to 8 I > also > > > (concatenate in "front") want to copy position 1 to 3. > > > > > > Hmmm. Hard requirement if you want all of this in ONE pass. Could > > you be kind > > > to post an example of your input and output? > > > > An hypotethical example (monospace font recommended): > > > > Input: > > ----+----1----+----2----+----3----+----4----+----5----+----6---- > > +----7----+----8 > > > 001aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb01ccccccccccccccccccccccccccccccdddddddd01 > > > 002aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb02ccccccccccccccccccccccccccccccdddddddd02 > > > 003aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb03ccccccccccccccccccccccccccccccdddddddd03 > > > 004aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb04ccccccccccccccccccccccccccccccdddddddd04 > > > 005aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb05ccccccccccccccccccccccccccccccdddddddd05 > > > 006aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb06ccccccccccccccccccccccccccccccdddddddd06 > > > 007aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb07ccccccccccccccccccccccccccccccdddddddd07 > > > 008aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb08ccccccccccccccccccccccccccccccdddddddd08 > > > 009aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb09ccccccccccccccccccccccccccccccdddddddd09 > > > 010aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb10ccccccccccccccccccccccccccccccdddddddd10 > > > > > > Output: > > ----+----1----+----2----+----3 > > bbbbbbbb01 > > bbbbbbbb02 > > bbbbbbbb03 > > bbbbbbbb04 > > bbbbbbbb05 > > 006bbbbbbbb06 > > 007bbbbbbbb07 > > 008bbbbbbbb08dddddddd08 > > bbbbbbbb09dddddddd09 > > bbbbbbbb10 > > > > > > > What about the rest of input? Should they stay the same during > > copy or left out > > > of the output? > > > > The rest is discarded. > > > > > >I can see the use of the SUBSET (ICETOOL) for record selection > > but how do you > > > user DFSORT/ICETOOL to solve the combining record and varying position > needs > > > ? > > > > > > What about SPLICE and JOIN? > > > > I haven't looked more closely at these. Thought they required a > > matching file etc. > > > > > >I now use a homegrown program for this but it's lacking > > efficiency to say the > > > least and I'm looking at DFSORTs efficiency and speed. > > > > > > How so? Could you post that program or some snippets? I believe I > > could do that > > > with REXX. > > > > That program IS coded in REXX. It works but it's a problem with > > (very) large files. > > (This program is sort of a Swiss Army Knife with lot of other > > functions, this copy problem is a minor subfunction in it. > > I use it e g as a line command at ISPF 3.4 etc.) > > > > > > > > Best Regards, > > Thomas Berg > > ___________________________________________________________________ > > Thomas Berg Specialist zOS/RQM/IT Delivery Swedbank AB (Publ) > > > > > > ---------------------------------------------------------------------- > > 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