IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Is there any command in REXX to split a record in to 2 lines


IBM Mainframe Forums -> CLIST & REXX
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
bhavya_sha

New User


Joined: 16 Apr 2005
Posts: 33

PostPosted: Mon Feb 15, 2010 10:34 am
Reply with quote

Hi,

iam new to rexx and the question iam posing might be very basic kindly excuse.

I got a record which is having non-cobol/english char and when i translate it may not take single byte always and length may go beyond 72.the requirement now is to split the record @ appropriate position if it exceeds 72bytes and move to next line. i've written a logic but it's bit lengthy , kindly let me know if there is any simple procedure to achieve this.

Regards,
Back to top
View user's profile Send private message
enrico-sorichetti

Superior Member


Joined: 14 Mar 2007
Posts: 10873
Location: italy

PostPosted: Mon Feb 15, 2010 10:47 am
Reply with quote

Unless You post Your code, we cannot tell if it is the best choice!
Back to top
View user's profile Send private message
bhavya_sha

New User


Joined: 16 Apr 2005
Posts: 33

PostPosted: Mon Feb 15, 2010 11:48 am
Reply with quote

CODE IS AS BELOW

Code:
 SPLIT_REC_BYND72:
 PARSE VAR COB_REC.REC_CNT TGTA TGTB
 TGT_DIV = SUBSTR(COB_REC_BYND72.REC_CNT,8,2)                         /* TO CHECK WHETHER THE DATA STARTS FROM COL 8 OR COL12   */
 
 SEQ_NUM = TGTA                                                       /* STORES SEQUENCE NUM PRESENT IN 1-6TH COLUMN           */

 LIN_NO = 1

 /******************************************************************/
 /* IF RECORD CAN FIT IN A SINGLE LINE(72 BYTES) AFTER             */
 /* TRANSLITERATION THEN WRITE TO OUTPUT FILE                      */
 /******************************************************************/

 IF LENGTH(TGTB) <= 60 THEN                       
 DO

   IF TGT_DIV = ' ' THEN
   DO
     CALL LINEOUT COB_SPLT_F,TGTA || ' '|| TGTB
   END
   ELSE
   DO
     CALL LINEOUT COB_SPLT_F,TGTA || '     '|| TGTB
   END
 END

 /******************************************************************/
 /* IF RECORD CANNOT BE ACCOMODATED IN A SINGLE LINE(72BYTES) AFTER*/
 /* TRANSLITERATION THEN SPLIT THE RECORD TO FIT IN                */
 /******************************************************************/

 ELSE IF LENGTH(TGTB) > 60 THEN
 DO
   DO WHILE SPLIT_REC_LEN <= COB_REC_LENGTH
   IF TGT_DIV = '  ' THEN                                             /*IF THE RECORD TO BE SPLITTED STARTS FROM 12TH COLUMN    */
   DO                                                                 /*WRITE TRANSLITERATED TEXT FROM COLUMN12                 */   
     TGTA  = TGTA || '     '
   END
   ELSE
   DO
     TGTA  = TGTA || ' '                                              /*IF THE RECORD TO BE SPLITTED STARTS FROM 8TH COLUMN    */
   END                                                                /*WRITE TRANSLITERATED TEXT FROM COLUMN8                  */
   IF LIN_NO = 1 THEN
    DO
      SPLIT_LEN = 0
      DO WHILE SPLIT_LEN <= 60
         PARSE VAR TGTB TGTC TGTD
     SPLIT_LEN = SPLIT_LEN + LENGTH(TGTC) 
         IF SPLIT_LEN <= 60 THEN
         DO
             TGTA  = TGTA || ' ' || TGTC
             SPLIT_REC_LEN = LENGTH(TGTA)
        TGTB = TGTD
               LIN_NO = LIN_NO + 1
         END

         IF LENGTH(TGTC) > 60 THEN
         DO
           SAY 'LENGTH EXCEEDS 60 BYTES'
         END 
      END
         CALL LINEOUT COB_SPLT_F,TGTA
    SPLIT_REC_LEN = LENGTH(TGTA)
    END
    ELSE
    DO
       SPLIT_LEN = 0
       TGTA = SEQ_NUM ||'     '
       DO WHILE SPLIT_LEN <= 60
         PARSE VAR TGTB TGTC TGTD         
     SPLIT_LEN = SPLIT_LEN + LENGTH(TGTC) 

         IF SPLIT_LEN <= 60 THEN
         DO
             TGTA  = TGTA || ' '|| TGTC
             SPLIT_LEN = LENGTH(TGTA)
        TGTB = TGTD
               LIN_NO = LIN_NO + 1
         END
 
         IF LENGTH(TGTC) > 60 THEN
         DO
           SAY 'LENGTH EXCEEDS 60 COLUMNS'
         END 
       END
        CALL LINEOUT COB_SPLT_F,TGTA 
       SPLIT_REC_LEN = SPLIT_REC_LEN + LENGTH(TGTA)
     END
   END
       OUT_REC = SEQ_NUM || COPIES(' ',(66)) || DATA_73
       CALL LINEOUT COB_SPLT_F , OUT_REC
 END 
 

/************************************************************************************************************************/
Back to top
View user's profile Send private message
sunil kumar purohit

New User


Joined: 10 Sep 2009
Posts: 37
Location: bangalore

PostPosted: Mon Feb 15, 2010 6:39 pm
Reply with quote

Hi Bhavya,
I think SubStr function may help you.
Back to top
View user's profile Send private message
MBabu

Active User


Joined: 03 Aug 2008
Posts: 400
Location: Mumbai

PostPosted: Mon Feb 15, 2010 10:03 pm
Reply with quote

Parse is a good technique. alternatively, you an use the word() or subword() functions to break apart records, creating new records as you go, checking the length before adding another word, as it appears you are already doing. Parse is pretty fast though. If it works, what I understand you to have here looks good (I didn't try it).
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> CLIST & REXX

 


Similar Topics
Topic Forum Replies
No new posts Compile Several JCL JOB Through one r... CLIST & REXX 4
No new posts How to split large record length file... DFSORT/ICETOOL 10
No new posts RACF - Rebuild SETROPTS command which... All Other Mainframe Topics 3
No new posts Running REXX through JOB CLIST & REXX 13
No new posts Error to read log with rexx CLIST & REXX 11
Search our Forums:

Back to Top