Scan and Replace
From MidrangeWiki
Summary
The following are the RPG/LE fully free-form definitions and instructions needed for using the Scan and Replace service procedure. This service procedure simply allows the caller to find all needles in a haystack and replace them with a straw. If the replacement "straw" is omitted (or is a zero-length string) then the "needle" is deleted by default.
Service Procedure
**free //============================================================================== // Find all occurrences of a "needle" in the "haystack" and replace them // with the "straw" -- returning the "newhaystack". //============================================================================== dcl-pr GenUtl_ScanAndReplace varchar(65535) rtnparm; Needle varchar(32767) const; Haystack varchar(65535) const; Straw varchar(32767) const; end-pr; //============================================================================== // Find all occurrences of a "needle" in the "haystack" and replace them // with the "straw" -- returning the "newhaystack". //============================================================================== dcl-proc GenUtl_ScanAndReplace export; dcl-pi *n varchar(65535) rtnparm; Needle varchar(32767) const; Haystack varchar(65535) const; Straw varchar(32767) const; end-pi; dcl-s NewHaystack like(Haystack); dcl-s posn packed(5:0); NewHaystack = Haystack; // transfer haystack to internal area posn = %scan(Needle: NewHaystack); // find first needle, if any dow posn > *zero; // loop on needles found NewHaystack = %replace(Straw: NewHaystack: posn: %len(Needle)); // remove it if ((posn + %len(Straw)) <= %len(NewHaystack)); // room for more needles? posn = %scan(Needle: NewHaystack: posn + %len(Straw)); // yes, find one else; // else posn = *zero; // end of haystack endif; enddo; // end loop on needles found return NewHaystack; // return to caller end-proc;