?Strtranc("This is a TEst OF Strtranc","Test","New Test")will get into an infinite loop.
* FUNCTION STRTRANC * A case-insensitive STRTRAN(). In other words, characters in either the * searched string or the string searched for are matched regardless of case, and * the replacement string inserted. * Parameters are in the same format as SUBSTR: * TYPE REQ/OPT * tcSearched C REQ * tcSearchfor C REQ * tcReplace C OPT * Although some parameters are identified as required, * the routine recovers gracefully if they are of a different data type. * The developer may want to add notification in these cases * The function returns the value of the string as converted by the function. FUNCTION STRTRANC PARAMETERS tcSearched, tcSearchfor, tcReplace LOCAL llContinue, lcReturn, lcReplace, lnSearchForSize lcReturn = IIF (VARTYPE (tcSearched) = "C", tcSearched, "") IF NOT EMPTY (tcSearchfor) AND VARTYPE (tcSearchfor) = "C" llContinue = .T. lcReplace = IIF (VARTYPE (tcReplace) = "C", tcReplace, "") lnSearchForSize = LEN (tcSearchfor) lnStart = ATC (tcSearchfor, lcReturn) DO WHILE lnStart > 0 *!* lcReturn = LEFT (lcReturn, lnStart-1) + lcReplace + SUBSTR (lcReturn, lnStart + lnSearchForSize) *!* New line to fix infinite loop problem lcReturn = LEFT (lcReturn, lnStart-1) + chr(254)+chr(253)+chr(254) + SUBSTR (lcReturn, lnStart + lnSearchForSize) *!* lnStart = ATC (tcSearchfor, lcReturn) ENDDO *!* Added to do real replace to avoid infinite loop lcReturn = strtran(lcReturn,chr(254)+chr(253)+chr(254),lcReplace) *!* ENDIF RETURN lcReturnElmer