MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Disposition of records

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities
View previous topic :: View next topic  
Author Message
naveen_kj
Beginner


Joined: 03 Feb 2003
Posts: 18
Topics: 8
Location: India

PostPosted: Thu Aug 21, 2003 10:52 am    Post subject: Disposition of records Reply with quote

Hi,

I have a file which contains a fixed length of 4 bytes as key field. The starting position is from 1st, 2nd, 3rd and so on... I do not know the exact starting position of the field in the input file.

input file

XXXX
two spaces and YYYY
AAAA
three spaces and BBBBB
one space and CCCC

output file as,

XXXX
YYYY
AAAA
BBBB
CCCC

Can this be done by using sort.

Thanks,
Naveen
Back to top
View user's profile Send private message Yahoo Messenger MSN Messenger
coolman
Intermediate


Joined: 03 Jan 2003
Posts: 283
Topics: 27
Location: US

PostPosted: Fri Aug 22, 2003 1:16 am    Post subject: Reply with quote

Naveen,
What is the maximum number of spaces that is possible after which the first valid character of the record will start.

Cheers,
Coolman.
________
honey oil


Last edited by coolman on Sat Feb 05, 2011 1:26 am; edited 1 time in total
Back to top
View user's profile Send private message
naveen_kj
Beginner


Joined: 03 Feb 2003
Posts: 18
Topics: 8
Location: India

PostPosted: Fri Aug 22, 2003 6:29 am    Post subject: Reply with quote

Coolman,

The maximum number of spaces is 10.

Naveen
Back to top
View user's profile Send private message Yahoo Messenger MSN Messenger
coolman
Intermediate


Joined: 03 Jan 2003
Posts: 283
Topics: 27
Location: US

PostPosted: Fri Aug 22, 2003 8:31 am    Post subject: Reply with quote

Naveen,
The following job should give you the results...

Code:

//STEP1    EXEC PGM=ICETOOL
//IN   DD *
 AAAAAAAAAA
AAAAAAAAAA
  BBBBBBBBBBBBBBBB
   CCCCCCCCCCCCCCCC
    DDDDDDDDDDDDDDD
     EEEEEEEEEEEEEE
      FFFFFFFFFFFFFFF
       GGGGGGGGGGGGGGGG
        HHHHHHHHHHHHHHHHH
         IIIIIIIIIIIIIIII
          JJJJJJJJJJJJJJJJJJ
//TOOLMSG  DD SYSOUT=*
//DFSMSG  DD SYSOUT=*
//OUT     DD SYSOUT=*
//T0      DD DSN=&T0,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T1      DD DSN=&T1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T2      DD DSN=&T2,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T3      DD DSN=&T3,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T4      DD DSN=&T4,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T5      DD DSN=&T5,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T6      DD DSN=&T6,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T7      DD DSN=&T7,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T8      DD DSN=&T8,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T9      DD DSN=&T9,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//T10     DD DSN=&T10,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//TE      DD DSN=&TE,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
//CON     DD DSN=*.T0,VOL=REF=*.T0,DISP=(SHR,PASS)
//        DD DSN=*.T1,VOL=REF=*.T1,DISP=(SHR,PASS)
//        DD DSN=*.T2,VOL=REF=*.T2,DISP=(SHR,PASS)
//        DD DSN=*.T3,VOL=REF=*.T3,DISP=(SHR,PASS)
//        DD DSN=*.T4,VOL=REF=*.T4,DISP=(SHR,PASS)
//        DD DSN=*.T5,VOL=REF=*.T5,DISP=(SHR,PASS)
//        DD DSN=*.T6,VOL=REF=*.T6,DISP=(SHR,PASS)
//        DD DSN=*.T7,VOL=REF=*.T7,DISP=(SHR,PASS)
//        DD DSN=*.T8,VOL=REF=*.T8,DISP=(SHR,PASS)
//        DD DSN=*.T9,VOL=REF=*.T9,DISP=(SHR,PASS)
//        DD DSN=*.T10,VOL=REF=*.T10,DISP=(SHR,PASS)
//TOOLIN  DD *
  COPY FROM(IN) USING(CTL0)
  COPY FROM(TE) USING(CTL1)
  COPY FROM(TE) USING(CTL2)
  COPY FROM(TE) USING(CTL3)
  COPY FROM(TE) USING(CTL4)
  COPY FROM(TE) USING(CTL5)
  COPY FROM(TE) USING(CTL6)
  COPY FROM(TE) USING(CTL7)
  COPY FROM(TE) USING(CTL8)
  COPY FROM(TE) USING(CTL9)
  COPY FROM(CON) TO(OUT)
/*
//CTL0CNTL  DD *
  OUTFIL FNAMES=T0,INCLUDE=(1,1,CH,NE,C' ')
  OUTFIL SAVE,FNAMES=TE
/*
//CTL1CNTL  DD *
  OUTFIL FNAMES=T1,INCLUDE=(2,1,CH,NE,C' '),
  OUTREC=(2,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL2CNTL  DD *
  OUTFIL FNAMES=T2,INCLUDE=(3,1,CH,NE,C' '),
  OUTREC=(3,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL3CNTL  DD *
  OUTFIL FNAMES=T3,INCLUDE=(4,1,CH,NE,C' '),
  OUTREC=(4,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL4CNTL  DD *
  OUTFIL FNAMES=T4,INCLUDE=(5,1,CH,NE,C' '),
  OUTREC=(5,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL5CNTL  DD *
  OUTFIL FNAMES=T5,INCLUDE=(6,1,CH,NE,C' '),
  OUTREC=(6,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL6CNTL  DD *
  OUTFIL FNAMES=T6,INCLUDE=(7,1,CH,NE,C' '),
  OUTREC=(7,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL7CNTL  DD *
  OUTFIL FNAMES=T7,INCLUDE=(8,1,CH,NE,C' '),
  OUTREC=(8,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL8CNTL  DD *
  OUTFIL FNAMES=T8,INCLUDE=(9,1,CH,NE,C' '),
  OUTREC=(9,25,80:X)
  OUTFIL SAVE,FNAMES=TE
/*
//CTL9CNTL  DD *
  OUTFIL FNAMES=T9,INCLUDE=(10,1,CH,NE,C' '),
  OUTREC=(10,25,80:X)
  OUTFIL SAVE,FNAMES=T10,OUTREC=(11,25,80:X)

/*



An alternative would to be go in for a REXX solution which would be the easiest.

Code:


/* REXX - SPN */
"ALLOC FI(INPUT) DA('YOUR.INPUT') SHR REUSE"
"ALLOC FI(OUTPUT) DA('YOUR.OUTPUT') SHR REUSE"

"EXECIO * DISKR INPUT(STEM IN. FINIS "

DO I = 1 TO IN.0
     IN.I = SPACE(IN.I,0)
END
"EXECIO * DISKW OUTPUT(STEM IN. FINIS "
"FREE FI(INPUT,OUTPUT)"
EXIT



Hope this helps...

Cheers,
Coolman.
________
silver surfer vaporizer


Last edited by coolman on Sat Feb 05, 2011 1:26 am; edited 1 time in total
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12367
Topics: 75
Location: San Jose

PostPosted: Fri Aug 22, 2003 9:33 am    Post subject: Reply with quote

Naveen,

A simpler verison than what coolman posted.The following DFSORT/ICETOOL JCl will give you desired results.A brief explanation of the job.I assummed that your input file is 80 bytes in length and FB recfm.

We first take your input file and split it into 10 files based on no: of spaces for each record while adding a seqnum. This seqnum will be used for putting the records back in order.

The second sort takes in all the 10 files created above and sorts on the seqnum and stripps the seqnum

Code:

//STEP0100 EXEC PGM=ICETOOL                               
//*                                                       
//TOOLMSG   DD SYSOUT=*                                   
//DFSMSG    DD SYSOUT=*                                   
//IN        DD *                                         
          AAAA                                           
         BBBB                                             
        CCCC                                             
       DDDD                                               
      EEEE                                               
     FFFF                                                 
    GGGG                                                 
   HHHH                                                   
  IIII                                                   
 JJJJ                                                     
KKKKK                                                     
//T0       DD DSN=&T0,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T1       DD DSN=&T1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T2       DD DSN=&T2,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T3       DD DSN=&T3,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T4       DD DSN=&T4,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T5       DD DSN=&T5,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T6       DD DSN=&T6,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T7       DD DSN=&T7,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T8       DD DSN=&T8,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T9       DD DSN=&T9,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//CON      DD DSN=&T0,DISP=(OLD,PASS),VOL=REF=*.T0       
//         DD DSN=&T1,DISP=(OLD,PASS),VOL=REF=*.T1               
//         DD DSN=&T2,DISP=(OLD,PASS),VOL=REF=*.T2               
//         DD DSN=&T3,DISP=(OLD,PASS),VOL=REF=*.T3               
//         DD DSN=&T4,DISP=(OLD,PASS),VOL=REF=*.T4               
//         DD DSN=&T5,DISP=(OLD,PASS),VOL=REF=*.T5               
//         DD DSN=&T6,DISP=(OLD,PASS),VOL=REF=*.T6               
//         DD DSN=&T7,DISP=(OLD,PASS),VOL=REF=*.T7               
//         DD DSN=&T8,DISP=(OLD,PASS),VOL=REF=*.T8               
//         DD DSN=&T9,DISP=(OLD,PASS),VOL=REF=*.T9               
//OUT      DD SYSOUT=*                                           
//TOOLIN    DD *                                                 
  COPY FROM(IN) USING(CTL1)                                     
  SORT FROM(CON) USING(CTL2)                                     
//CTL1CNTL  DD *                                                 
  INREC FIELDS=(1,80,SEQNUM,8,ZD)                               
  OUTFIL FNAMES=T0,INCLUDE=(1,10,CH,EQ,C' '),                   
  OUTREC=(11,70,80:X,81,8)                                       
  OUTFIL FNAMES=T1,INCLUDE=(1,9,CH,EQ,C' ',AND,10,1,CH,NE,C' '),
  OUTREC=(10,71,80:X,81,8)                                       
  OUTFIL FNAMES=T2,INCLUDE=(1,8,CH,EQ,C' ',AND,9,1,CH,NE,C' '), 
  OUTREC=(09,72,80:X,81,8)                                       
  OUTFIL FNAMES=T3,INCLUDE=(1,7,CH,EQ,C' ',AND,8,1,CH,NE,C' '), 
  OUTREC=(08,73,80:X,81,8)                                       
  OUTFIL FNAMES=T4,INCLUDE=(1,6,CH,EQ,C' ',AND,7,1,CH,NE,C' '), 
  OUTREC=(07,74,80:X,81,8)                                       
  OUTFIL FNAMES=T5,INCLUDE=(1,5,CH,EQ,C' ',AND,6,1,CH,NE,C' '), 
  OUTREC=(06,75,80:X,81,8)                                       
  OUTFIL FNAMES=T6,INCLUDE=(1,4,CH,EQ,C' ',AND,5,1,CH,NE,C' '), 
  OUTREC=(05,76,80:X,81,8)                                       
  OUTFIL FNAMES=T7,INCLUDE=(1,3,CH,EQ,C' ',AND,4,1,CH,NE,C' '), 
  OUTREC=(04,77,80:X,81,8)                                       
  OUTFIL FNAMES=T8,INCLUDE=(1,2,CH,EQ,C' ',AND,3,1,CH,NE,C' '), 
  OUTREC=(03,78,80:X,81,8)                                       
  OUTFIL FNAMES=T9,INCLUDE=(1,1,CH,EQ,C' ',AND,2,1,CH,NE,C' '), 
  OUTREC=(02,79,80:X,81,8)                                       
//CTL2CNTL  DD *                   
  SORT FIELDS=(81,8,ZD,A)           
  OUTFIL FNAMES=OUT,OUTREC=(1,80)   
/*



Hope this helps...

cheers

kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12367
Topics: 75
Location: San Jose

PostPosted: Fri Aug 22, 2003 10:17 am    Post subject: Reply with quote

Naveen,
If your shop has easytrieve then the following JCL will give you desired results.

Code:

//STEP0100 EXEC PGM=EZTPA00                   
//STEPLIB  DD DSN=CORP.EASYTREV.PROD.LOADLIB,
//            DISP=SHR                       
//SYSPRINT DD SYSOUT=*                       
//SYSOUT   DD SYSOUT=*                       
//SYSSNAP  DD SYSOUT=*                       
//SYSUDUMP DD SYSOUT=*                       
//FILEIN   DD *                               
          AAAA                               
         BBBB                                 
        CCCC                                 
       DDDD                                   
      EEEE                                   
     FFFF                                     
    GGGG                                     
   HHHH                                       
  IIII                                       
 JJJJ                                         
KKKK                                         
//FILEOUT  DD SYSOUT=*,                       
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=0
//SYSIN    DD *                               
                                             
  FILE FILEIN                                 
         IN-REC            01 80  A           
                                             
  W-STRING           W  80  A                 
    W-STR        W-STRING 1 A OCCURS 80       

  W-SUB              W  02  N                               
  W-END-POS          W  02  N                               
  W-CHAR-FOUND       W  01  A                               
                                                           
  FILE FILEOUT FB(0 0)                                     
       OUT-REC       01 80 A                               
                                                           
  JOB INPUT FILEIN                                         
                                                           
   W-STRING = IN-REC                                       
   MOVE SPACES TO OUT-REC                                   
   MOVE SPACES TO W-CHAR-FOUND                             
                                                           
   W-SUB = 1                                               
   DO  UNTIL W-SUB GT 11  OR W-CHAR-FOUND = 'Y'             
    CASE W-STR (W-SUB)                                     
         WHEN ' '                                           
             W-SUB        = W-SUB  + 1               
         OTHERWISE                                         
             W-CHAR-FOUND = 'Y'                             
             W-END-POS    = FILEIN:RECORD-LENGTH - W-SUB   
             MOVE W-STR (W-SUB) W-END-POS  TO OUT-REC       
    END-CASE                                               
   END-DO                                                   
                                                           
   PUT FILEOUT                                             
/*                       


Hope this helps...

cheers

kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
naveen_kj
Beginner


Joined: 03 Feb 2003
Posts: 18
Topics: 8
Location: India

PostPosted: Sat Aug 23, 2003 4:10 am    Post subject: Reply with quote

Kolusu/Coolman,

Thanks for the solutions. I got the expected results.

Naveen
Back to top
View user's profile Send private message Yahoo Messenger MSN Messenger
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Thu May 18, 2006 4:25 pm    Post subject: Reply with quote

With z/OS DFSORT V1R5 PTF UK90007 or DFSORT R14 PTF UK90006 (April, 2006), you can use DFSORT's new JFY function to do this kind of thing quite easily as shown by this DFSORT job.

Code:

//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD *
          AAAA
         BBBB
        CCCC
       DDDD
      EEEE
     FFFF
    GGGG
   HHHH
  IIII
 JJJJ
KKKKK
/*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
  OPTION COPY
* Left-justify the characters.
  INREC BUILD=(1,80,JFY=(SHIFT=LEFT))
/*


For complete details on all of the new DFSORT and ICETOOL functions available with the April, 2006 PTFs, see:

http://www.ibm.com/servers/storage/s...sort/mvs/peug/
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group