* Averages: * 0.74s ALINES() m. * 0.75s ALINES() * 0.46s GETWORDNUM() Rick * 0.46s GETWORDNUM() Walter * Test code: CLEAR DIMENSION laAlinesM[5] DIMENSION laAlines[5] DIMENSION laGetWordNumR[5] DIMENSION laGetWordNumW[5] IF reverse_alines_mdot("one, two, three") != "three, two, one" ? "reverse_alines_mdot() fails test" ENDIF IF reverse_alines("one, two, three") != "three, two, one" ? "reverse_alines() fails test" ENDIF IF reverse_getwordnum_rick("one, two, three") != "three, two, one" ? "reverse_getwordnum_rick() fails test" ENDIF IF reverse_getwordnum_walter("one, two, three") != "three, two, one" ? "reverse_getwordnum_walter() fails test" ENDIF ? "" FOR lnPass = 1 TO 5 ? "**** Pass " + TRANSFORM(lnPass) lnStart = SECONDS() FOR lnI = 1 TO 100000 k = reverse_alines_mdot("one, two, three") NEXT laAlinesM[lnPass] = SECONDS() - lnStart ? "ALINES() m.", SECONDS() - lnStart lnStart = SECONDS() FOR lnI = 1 TO 100000 k = reverse_alines("one, two, three") NEXT laAlines[lnPass] = SECONDS() - lnStart ? "ALINES()", SECONDS() - lnStart lnStart = SECONDS() FOR lnI = 1 TO 100000 k = reverse_getwordnum_rick("one, two, three") NEXT laGetWordNumR[lnPass] = SECONDS() - lnStart ? "GETWORDNUM() Rick", SECONDS() - lnStart lnStart = SECONDS() FOR lnI = 1 TO 100000 k = reverse_getwordnum_walter("one, two, three") NEXT laGetWordNumW[lnPass] = SECONDS() - lnStart ? "GETWORDNUM() Walter", SECONDS() - lnStart ? "" NEXT ? "**** Averages" ? "ALINES() m.", show_average(@laAlinesM) ? "ALINES()", show_average(@laAlines) ? "GETWORDNUM() Rick", show_average(@laGetWordNumR) ? "GETWORDNUM() Walter", show_average(@laGetWordNumW) FUNCTION show_average LPARAMETERS taArray EXTERNAL ARRAY taArray LOCAL lnI, lnAvg lnAvg = 0 FOR lnI = 1 TO ALEN(taArray, 1) lnAvg = lnAvg + taArray[lnI] NEXT RETURN ROUND(lnAvg / ALEN(taArray, 1), 2) FUNCTION reverse_alines_mdot LPARAMETERS tcText LOCAL lnLines, lcText, x LOCAL ARRAY laLines[1] IF "," $ tcText lnLines = ALINES(laLines,m.tcText,1,",") lcText = laLines[m.lnLines] FOR x = lnLines-1 TO 1 STEP -1 lcText = m.lcText + ", " + laLines[m.x] ENDFOR x RETURN m.lcText ENDIF RETURN tcText FUNCTION reverse_alines LPARAMETERS tcText LOCAL lnLines, lcText, x LOCAL ARRAY laLines[1] IF "," $ tcText lnLines = ALINES(laLines, tcText, 1, ",") lcText = laLines[lnLines] FOR x = lnLines-1 TO 1 STEP -1 lcText = lcText + ", " + laLines[x] ENDFOR x RETURN lcText ENDIF RETURN tcText FUNCTION reverse_getwordnum_rick LPARAMETERS tcString LOCAL lnI, lcString IF "," $ tcString * Reverse comma-delimited items lcString = SPACE(0) FOR lnI = GETWORDCOUNT(tcString, ",") TO 1 STEP -1 lcString = lcString + IIF(NOT EMPTY(lcString), ", ", SPACE(0)) + ALLTRIM(GETWORDNUM(tcString, lnI, ",")) NEXT ELSE * Pass-thru lcString = tcString ENDIF RETURN lcString FUNCTION reverse_getwordnum_walter LPARAMETERS tcString LOCAL lcString IF "," $ tcString * Reverse comma-delimited items lcString = "" FOR nT = GETWORDCOUNT(tcString, ",") TO 1 STEP -1 lcString = lcString + ALLTRIM(GETWORDNUM(tcString, nT, ",")) + ", " ENDFOR RETURN RTRIM(RTRIM(lcString), 1, ",") ELSE * Pass-thru lcString = tcString ENDIF RETURN lcString