Re: translate function
Posted in 1993
From Jack Parker: * * * Folks, * * I know this one has been written. Does somebody have it? * * CALL translate(from, to, string) RETURNING string * * Replaces all 'from' with 'to' in string. * * I just wrote it in 4gl and its too slow - anybody have a nice fast one? * Or needs must I take a dip into the 'c'? Here is my version: >---->--->S N I P>---->--->S N I P>---->--->S N I P>---->--->S N I P>---->---> FUNCTION translate(p1,p2,str) DEFINE p1 CHAR(256), p2 CHAR(256), str CHAR(512), ret_str CHAR(512), len1 SMALLINT, len2 SMALLINT, lens SMALLINT, pos1 SMALLINT, pos2 SMALLINT LET len1 = LENGTH( p1 ) LET len2 = LENGTH( p2 ) LET lens = LENGTH( str ) LET pos1 = 1 LET pos2 = 1 LET ret_str = " " WHILE pos1 <= ( lens - len1 + 1 ) IF str[ pos1, pos1 + len1 - 1 ] = p1 THEN LET ret_str[ pos2, pos2 + len2 - 1 ] = p2 CLIPPED LET pos2 = pos2 + len2 LET pos1 = pos1 + len1 ELSE LET ret_str[ pos2 ] = str[ pos1 ] LET pos1 = pos1 + 1 LET pos2 = pos2 + 1 END IF END WHILE IF pos1 < lens THEN LET ret_str[ pos2, pos2 + ( lens - pos1 ) ] = str[ pos1, lens ] END IF RETURN ret_str END FUNCTION <----<---<S N I P<----<---<S N I P<----<---<S N I P<----<---<S N I P<----<---< Hope this helps, Robert Minter |Data Systems Support| \\\\\\_/// Programmer, Software Development | Orange, CA | ( _ _ ) internet: rob@dssmktg.com | Tel: 714.771.0454 | (| ^ |) bangpath: uunet.uu.net!dssmktg!rob| Fax: 714.771.3028 | \\`-'/ I used to not know, now I know I don't know. \\_/