Arron,
If you are just looking for a way to split a long string try this procedure.
I haven't heavily tested it and it's not in production for anything, but it
seems to work.
 * Split a string into chunks and wrap by word if requested
P splitString     B
D splitString     PI            10i 0
D  inString                       *   value options(*string)
D  outString                      *   value
D  len                          10i 0 const
D  wordWrap                       n   const options(*nopass)
 *
D lastPos         s             10i 0 static
D startPos        s             10i 0
D endPos          s             10i 0
D string          s          65535a   varying
D pReturnString   s               *
D returnString    s          65535a   based(pReturnString)
 *
 /free
  // Check to see if this is a reset
  if (lastPos < 0);
        return
-1;
endif;
      // Load the work
string
      %len(string) =
%len(%str(inString));
      string =
%str(inString);
      // Set up the return string and default it to
blanks
      pReturnString =
outString;
      %subst(returnString : 1 : len) =
*blanks;
      // The start position should be the end position plus
1
      startPos = lastPos +
1;
      endPos =
0;
      // Add the length to the end
position
      lastPos +=
len;
      // Return the chunck if we are not wrapping by
words
      if (%parms() <> 4 and %addr(wordWrap) <> *null and not
wordWrap);
        // Check the start end end
points
        if (startPos >
lastPos);
          lastPos =
-1;
          endPos =
-1;
else;
          endPos = (lastPos - startPos +
1);
endif;
      else; // Word wrap is
active
        // If the string contains no blanks, return the whole
string
        if (%scan(' ' : string) > len or %scan(' ' : string) =
0);
          lastPos =
-1;
          endPos =
-1;
endif;
        // Length of the string passed is the same incoming
length
        // return the incoming
string
        if (%len(string) <=
len);
          lastPos =
-1;
          endPos =
-1;
endif;
        // If the last position is less than 0, something else has
occured
        if (lastPos >=
0);
          // If the end position is greater than the length of the trimmed
string
          // we are
done.
          if (lastPos >=
%len(%trimr(string)));
            lastPos =
-1;
            endPos = (%len(%trimr(string)) - startPos +
1);
endif;
          if (endPos <=
0);
            // Loop through until we find a
blank
            dow (%subst(string : (lastPos + 1) : 1) <>
*blanks);
              lastPos -=
1;
              if (lastPos <=
0);
                lastPos =
len;
leave;
endif;
enddo;
            endPos = (lastPos - startPos +
1);
endif;
endif;
      endif; // Word wrap
test
      // Make sure the starting position is not a positive
number
      if (startPos <=
0);
        startPos =
1;
endif;
      // Set the return string
value
      if (endPos >
0);
        %subst(returnString : 1 : len)
=
            %trim(%subst(string : startPos :
endPos));
else;
        %subst(returnString : 1 : len) = %trim(%subst(string :
startPos));
endif;
      // Return the length of the return
string
      return %len(%trimr(%subst(returnString : 1 :
len)));
/end-free
*
     P splitString     E
It would work something like this.
dow (splitString(message : %addr(toMessage) :
    %len(toMessage) : *on) > 0);
  // do something
enddo;
HTH,
James R. Perkins
On Thu, Sep 18, 2008 at 12:21 PM, Aaron Bartell <aaronbartell@xxxxxxxxx>wrote:
Hi all,
I am trying to use regular expressions to take a long text string (from a
browser text box) and "splice" it out to fit into multiple DB2 records
which
are 40 characters long each.  I have found articles by Scott Klement and
Bob
Cozzi and they have gotten me pretty far, but I seem to be getting odd
results and am wondering if anybody can see where I might be wrong.
Basically I have an all inclusive program (see below) that hard codes a
long
string.  Then I compile the regex and execute it.  Both of these steps are
successful but when I loop through it with a FOR opcode I get weird results
where the first entry of regmatch_t is as expected, but the second and the
third aren't what I am expecting.  For the second I would expect a starting
string offset different than the first, but it is not.  For their third
iteration I get it matching up with a single character.
Any glaring mistakes given my general need?
Aaron Bartell
http://mowyourlawn.com
As an Amazon Associate we earn from qualifying purchases.