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
