lnStart = SECONDS() FOR lnI = 1 TO 1000000 k = reverse("one, two, three") NEXT ? SECONDS() - lnStart FUNCTION reverse LPARAMETERS tcString LOCAL lnI, lcString, lnLastFound, lcOutput IF NOT EMPTY(tcString) RETURN tcString ENDIF CREATE CURSOR c_temp ; ( ; cItem m ; ) lcString = "one, two, three" lnLastFound = 1 FOR lnI = 1 TO LEN(lcString) IF SUBSTR(lcString, lnI, 1) = "," OR lnI = LEN(lcString) INSERT INTO c_temp (cItem) VALUES (SUBSTR(lcString, lnLastFound, lnI - lnLastFound + IIF(lnI = LEN(lcString), 1, 0))) lnLastFound = lnI + 1 ENDIF NEXT lcOutput = SPACE(0) DO WHILE NOT BOF() lcOutput = lcOutput + IIF(NOT EMPTY(lcOutput), ", ", SPACE(0)) + cItem SKIP -1 ENDDO RETURN lcOutput:-)