Page 1 of 1

Removing header & trailing records without sorting

PostPosted: Thu Mar 22, 2012 6:18 am
by MitchellSTL
I want to perform the following but I'm just not getting it correctly:

1. Reformat VB (LR=165) to FB (LR=161)
2. Delete the first 8 records
3. Delete the last 3 records
4. Do not sort the data in between
5. Position 5 of the input file is empty (I used SORT FIELDS=(5,1,CH,A) -- a pseudo sort, if you will)

I can get the DATASORT to work.. but I can't seem to get the VTOF to work in the same step. There should be a way to do it all in one step.. =(

Maybe it's just too late in the evening to be working on this... =)

TIA!

Re: Removing header & trailing records without sorting

PostPosted: Thu Mar 22, 2012 6:38 am
by BillyBoyo
Can you show the cards you have?

Are you saying you are sorting on one byte which contains a blank on each record just to get the processing done? Try "OPTION COPY" or "SORT FIELDS=COPY" if so, which will read the input DD from start to finish but not do any sorting.

Re: Removing header & trailing records without sorting

PostPosted: Thu Mar 22, 2012 6:49 pm
by MitchellSTL
Yes that's what I'm saying...

This one had a RC=0 - yes I know it has two outputs, but I was grasping at straws last night and that it's wrong on soooo many levels... =)
//SORTOUT   DD SYSOUT=*                                         
//REFORMAT  DD SYSOUT=*                                         
//TOOLIN   DD *                                                 
  DATASORT FROM(FILEIN) TO(SORTOUT) FIRST(8) LAST(3) USING(CTL1)
/*                                                               
//CTL1CNTL  DD *                                                 
  OPTION VLSCMP                                                 
  SORT FIELDS=(5,1,CH,A)                                         
  OUTFIL FNAMES=REFORMAT,VTOF,                                   
     BUILD=(5,161)                                               
/*                                                               


But when I put SORT FIELDS=COPY or OPTION COPY, it fails with a RC=12

//SORTOUT   DD SYSOUT=*                                           
//REFORMAT  DD SYSOUT=*                                                         
//TOOLIN   DD *                                                   
  DATASORT FROM(FILEIN) TO(SORTOUT) FIRST(8) LAST(3) USING(CTL1) 
/*                                                               
//CTL1CNTL  DD *                                                 
  SORT FIELDS=COPY                                               
  OUTFIL FNAMES=REFORMAT,VTOF,                                   
     BUILD=(5,161)                                               
/*                                                               

Re: Removing header & trailing records without sorting

PostPosted: Thu Mar 22, 2012 7:45 pm
by BillyBoyo
I think SUBSET might be a good one for you instead of the DATASORT. You don't want to sort, so DATASORT is not the best choice.

I've tested this with 80-byte records, converting them to variable in a SORT step.

//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=&&OUT,DISP=(OLD,PASS)
//OUT1 DD SYSOUT=*
//TOOLIN DD *
 SUBSET FROM(IN1) TO(OUT1) INPUT REMOVE FIRST(8) LAST(3) USING(CTL1)
                                                                     
//CTL1CNTL DD *
  OPTION COPY
  OUTFIL VTOF,OUTREC=(5,80)


With this input:

88888888
88888888
88888888
88888888
88888888
88888888
88888888
88888888
11111111
SOME
OTHER
STUFF
PRETENDING
TO
BE
TEST
DATA
33333333
33333333
33333333


I get this output:

11111111 
SOME     
OTHER     
STUFF     
PRETENDING
TO       
BE       
TEST     
DATA     


This is an extract from the output messages:

ICE210I 0 OUT1     : BSAM USED, LRECL = 80, BLKSIZE = 80, TYPE = FB     
ICE055I 0 INSERT 0, DELETE 8                                             
ICE054I 0 RECORDS - IN: 17, OUT: 9                                       
ICE227I 0 OUT1     : DELETED = 0, REPORT = 0, DATA = 9                   
ICE228I 0 OUT1     : TOTAL IN = 9, TOTAL OUT = 9                         
ICE052I 0 END OF DFSORT                                                 

Re: Removing header & trailing records without sorting

PostPosted: Thu Mar 22, 2012 8:15 pm
by MitchellSTL
Thank you!! Worked great! Never seen the SUBSET used before (even scanned our library of JCL and it's never been used at our shop - then again, neither has DATASORT). Thank you again!

Re: Removing header & trailing records without sorting

PostPosted: Thu Mar 22, 2012 8:21 pm
by BillyBoyo
No problem. Thanks for letting us know.

I'd not noticed it either, before today. I got it from the Smart DFSORT Tricks paper, well-worth getting a hold of and looking at the Table of Contents so you know the kind of stuff that is inside. Always my first port-of-call for "tricky" sort questions :-)

Re: Removing header & trailing records without sorting

PostPosted: Thu Mar 22, 2012 11:34 pm
by Frank Yaeger
But when I put SORT FIELDS=COPY or OPTION COPY, it fails with a RC=12


That's because DATASORT requires a real SORT statement.

BB is correct that SUBSET is the appropriate DFSORT/ICETOOL operator for what you want to do.

If you're not familiar with all of the available DFSORT and DFSORT/ICETOOL functions, I'd suggest reading through "z/OS DFSORT: Getting Started". It's an excellent tutorial, with lots of examples, that will show you how to use DFSORT, DFSORT's ICETOOL and DFSORT Symbols. You can access it online, along with all of the other DFSORT books, from:

http://www.ibm.com/support/docview.wss? ... g3T7000080