There were a couple of issues about finding a multiple delimiter.
 
So the new rexx will produce empty records too (means record with the delimiter 
only) and could manage a delimiter as a file termination (last empty record) or 
file start.
 
Sorry for flooding the list with such a long answer.
 
Regards.
 
Input:
********************************* Top of Data **********************************
$$A...+....1....+....2....+....3....+....4....+....5                            
....+....6....+....$B...+....1....+....2....+....3..                            
..+....4....+....5....+....6....+....7$C...+....1...                            
.+....2....+....3....+....4....+....$D....+....2....                            
+....3$E...+....1....+....2....+....3....+....4$F$G.                            
...+....1$H...$$I...+....1$L...+....2....+....3..$$$                            
******************************** Bottom of Data ********************************
 
Output:
********************************* Top of Data **********************************
$                                                                               
$A...+....1....+....2....+....3....+....4....+....5....+....6....+....          
$B...+....1....+....2....+....3....+....4....+....5....+....6....+....7         
$C...+....1....+....2....+....3....+....4....+....                              
$D....+....2....+....3                                                          
$E...+....1....+....2....+....3....+....4                                       
$F                                                                              
$G....+....1                                                                    
$H...                                                                           
$                                                                               
$I...+....1                                                                     
$L...+....2....+....3..                                                         
$                                                                               
$                                                                               
$                                                                               
******************************** Bottom of Data ********************************
 
Rexx:
 
/* REXX */                                                              
PARSE ARG BLOCK_READ .                                                  
BLOCCO = 0                                                              
BLOCCW = 0                                                              
LETTI = 0                                                               
DROP LISTA.                                                             
L = 0                                                                   
DELIM = "$"                                                             
INP_STR = ""                                                            
OUT_STR = ""                                                            
                                                                        
"EXECIO 0 DISKR FILE1"                                                  
"EXECIO 0 DISKW FILE2"                                                  
                                                                        
"EXECIO" BLOCK_READ "DISKR FILE1(STEM INPUT."                           
                                                                        
DO WHILE(INPUT.0 > 0)                                                   
  BLOCCO = BLOCCO + 1                                                   
  SAY "LETTO BLOCCO:" BLOCCO "DI" INPUT.0 "RECORDS"                     
  IF BLOCCO = 1 &,                                                      
     LEFT(INPUT.1,1) <> DELIM THEN DO                                   
    SAY "FIRST RECORD DOES NOT START WITH '"DELIM"'"                    
    EXIT(99)                                                            
  END                                                                   
  CALL ELABORA                                                          
  "EXECIO" BLOCK_READ "DISKR FILE1(STEM INPUT."                         
END                                                                     
                                                                        
IF INP_STR > "" THEN DO                                                 
  L = L + 1                                                             
  LISTA.L = INP_STR                                                     
END                                                                     
                                                                        
IF L > 0 THEN DO                                                        
  BLOCCW = BLOCCW + 1                                                   
  "EXECIO" L "DISKW FILE2(STEM LISTA."                                  
  SAY "SCRITTO BLOCCO:" BLOCCW "DI" L "RECORDS"                         
END                                                                     
                                                                        
"EXECIO 0 DISKR FILE1(FINIS"                                            
"EXECIO 0 DISKW FILE2(FINIS"                                            
                                                                        
SAY "RECORDS LETTI.......:" LETTI                                       
IF LETTI > 0 THEN                                                       
  SAY "RECORDS SCRITTI.....:" (BLOCCW - 1) * BLOCK_READ + L             
                                                                        
EXIT                                                                    
                                                                        
/*----------------------------------------------------------------*/    
ELABORA:                                                                
                                                                        
DO I = 1 TO INPUT.0                                                     
  LETTI = LETTI + 1                                                     
  INP_STR = INP_STR || INPUT.I                                          
  S_STR = SUBSTR(INP_STR,2)                                             
  XY = INDEX(S_STR,DELIM)                                               
  DO WHILE(XY > 0)                                                      
    OUT_STR = LEFT(INP_STR,XY)                                          
    INP_STR = SUBSTR(INP_STR,XY+1)                                      
    L = L + 1                                                           
    LISTA.L = OUT_STR                                                   
    IF L = BLOCK_READ THEN DO                                           
      BLOCCW = BLOCCW + 1                                               
      "EXECIO" L "DISKW FILE2(STEM LISTA."                              
      SAY "SCRITTO BLOCCO:" BLOCCW "DI" L "RECORDS"                     
      L = 0                                                             
    END                                                                 
    S_STR = SUBSTR(INP_STR,2)                                           
    XY = INDEX(S_STR,DELIM)                                             
  END                                                                   
END                                                                     
                                                                        
RETURN                                                                  
________________________________
 
 Da: Charles Mills <[email protected]>
A: [email protected] 
Inviato: Mercoledì 16 Gennaio 2013 16:53
Oggetto: Re: Break a dataset into new record boundaries?
  
> Charles has already solved this?

Yup. 98% anyway.

Charles

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:[email protected]] On
Behalf Of Dave Salt
Sent: Wednesday, January 16, 2013 7:17 AM
To: [email protected]
Subject: Re: Break a dataset into new record boundaries?

As I understand it, Charles has already solved this? But if not, and if help
is still required with writing a macro, let me know.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to