Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

SORT using REXX

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> CLIST & REXX
View previous topic :: :: View next topic  
Author Message
spoorni80

New User


Joined: 26 Nov 2013
Posts: 3
Location: USA

PostPosted: Thu Dec 12, 2013 10:20 pm    Post subject: SORT using REXX
Reply with quote

I have a sort parm in a JCL that is created using some REXX code as follows:

Code:
/* REXX */                                                           
'EXECIO * DISKR ZEROGDT (STEM ZGD.'                                 
S21='                     '                                         
OUTVAR1=' SORT FIELDS=COPY'                                         
'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                               
DO I=1 TO ZGD.0                                                     
   ACCTNBR=SUBSTR(ZGD.I,33,16)                                       
   IF I=1 THEN DO                                                   
     OUTVAR1=" OMIT FORMAT=CH,COND=(33,16,EQ,C'"||ACCTNBR||"',OR,"   
   END                                                               
   ELSE DO                                                           
      IF I=ZGD.0 THEN OUTVAR1=S21||" 33,16,EQ,C'"||ACCTNBR||"')"     
      ELSE OUTVAR1=S21||" 33,16,EQ,C'"||ACCTNBR||"',OR,"             
   END                                                               
   'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                             
END                                                                 
'EXECIO 0 DISKW ACCOUNT (FINIS'   


I know that the above REXX code creates a sort parm as follows:

SORT FIELDS=COPY
OMIT FORMAT=CH,COND=(33,16,EQ,C'8257310018808572',OR,
33,16,EQ,C'8257310018076428',OR,
33,16,EQ,C'8257310017959681',OR,
33,16,EQ,C'8257310016504835',OR,
33,16,EQ,C'8257310016059467',OR)

But, it is not able to handle a single record in the input file. I am trying to modify the REXX code to handle a single record but have not been able to. I know the code to be added is
OUTVAR1=" OMIT FORMAT=CH,COND=(33,16,EQ,C'"||ACCTNBR||"')"
but the IF condition is not working for me. Could anyone suggest any ideas.
Back to top
View user's profile Send private message

Akatsukami

Global Moderator


Joined: 03 Oct 2009
Posts: 1738
Location: Bloomington, IL

PostPosted: Thu Dec 12, 2013 10:51 pm    Post subject: Reply to: SORT using REXX
Reply with quote

Use:
Code:
/* Rexx */
'EXECIO * DISKR ZEROGDT (STEM ZGD.'                               
S21=' '                                                           
OUTVAR1=' SORT FIELDS=COPY'                                       
'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                             
DO I=1 TO ZGD.0                                                   
  ACCTNBR=SUBSTR(ZGD.I,33,16)                                     
  IF I=1 THEN                                                     
    if (i¬=zgd.0) then                                             
      OUTVAR1=" OMIT FORMAT=CH,COND=(33,16,EQ,C'"||ACCTNBR||"',OR,"
    else nop                                                       
  ELSE DO                                                         
    if i=zgd.0 then                                               
      if (i=1) then                                               
        outvar1=" OMIT FORMAT=CH,COND=(33,16,EQ,C'"||acctnbr||"')"
      else outvar1=S21||" 33,16,EQ,C'"||acctnbr||"')"             
    ELSE OUTVAR1=S21||" 33,16,EQ,C'"||ACCTNBR||"',OR,"             
  END                                                             
  'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                           
END                                                               
'EXECIO 0 DISKW ACCOUNT (FINIS'                                   
Back to top
View user's profile Send private message
spoorni80

New User


Joined: 26 Nov 2013
Posts: 3
Location: USA

PostPosted: Thu Dec 12, 2013 11:18 pm    Post subject:
Reply with quote

I tried doing this. The output created is
SORT FIELDS=COPY
SORT FIELDS=COPY
Back to top
View user's profile Send private message
spoorni80

New User


Joined: 26 Nov 2013
Posts: 3
Location: USA

PostPosted: Fri Dec 13, 2013 1:41 am    Post subject:
Reply with quote

I dont think the initial code would work very well with one record in the input. So, i changed the entire code as follows and it worked well:

Code:
/* REXX */                                                             
'EXECIO * DISKR ZEROGDT (STEM ZGD.'                                     
OUTVAR1=' SORT FIELDS=COPY'                                             
'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                                   
DO I=1 TO ZGD.0                                                         
/* ACCTNBR=SUBSTR(ZGD.I,33,16) */                                       
   IF (I=1) THEN                                                       
     OUTVAR1=" OMIT FORMAT=CH,COND=(33,16,EQ,C'"||SUBSTR(ZGD.I,33,16)   
   ELSE                                                                 
     OUTVAR1=COPIES(' ',21)||"33,16,EQ,C'"||SUBSTR(ZGD.I,33,16)         
   IF I=ZGD.0 THEN                                                     
     OUTVAR1=OUTVAR1||"')"                                             
   ELSE                                                                 
     OUTVAR1=OUTVAR1||"',OR,"                                           
   'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                               
END                                                                     
'EXECIO 0 DISKW ACCOUNT (FINIS'             


Thanks!
Back to top
View user's profile Send private message
expat

Global Moderator


Joined: 14 Mar 2007
Posts: 8593
Location: Back in jolly old England

PostPosted: Fri Dec 13, 2013 1:19 pm    Post subject:
Reply with quote

I usually handle that by setting the end of statement as a variable which changes values at the last record. You can also do the same for the start variable too.
Code:
"EXECIO * DISKR FILEIN (STEM FI. FINIS"                       
                                                             
START   = "  OMIT  COND=("                                   
ENDOF   = "',OR,"                                             
                                                             
MAKEBUF                                                       
QUEUE  " SORT   FIELDS=COPY"                                 
                                                             
DO AA = 1 TO FI.0                                             
  IF AA = FI.0 THEN ENDOF = "')   "                           
  WRK = START||"1,10,CH,EQ,C'"||SUBSTR(FI.AA,11,10)||ENDOF   
  QUEUE WRK                                                   
  IF AA = 1 THEN START = "              "                     
END                                                           
                                                             
"EXECIO "QUEUED()" DISKW FILEOUT ( FINIS"                     
DROPBUF                                                                         
 
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> CLIST & REXX All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts Limit duplicate records in the SORT pshongal SYNCSORT 6 Mon Nov 21, 2016 12:54 pm
No new posts What is the command to check MODE of ... rohanthengal CLIST & REXX 6 Fri Nov 18, 2016 1:48 pm
No new posts How to convert the VBM file to VB or... Sulabh Agrawal JCL & VSAM 4 Fri Nov 18, 2016 1:04 pm
This topic is locked: you cannot edit posts or make replies. Rexx to create GDG by scanning JJ result krish.deepu CLIST & REXX 5 Tue Oct 25, 2016 5:32 pm
No new posts Sort records based on numeric field. Alks SYNCSORT 2 Wed Oct 19, 2016 10:14 pm


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us