CLEAR
lnCount = 2500000
SET PRINTER TO \temp\t.t
SET PRINTER ON
DECLARE table_field[10]
table_field[1] = "Times New Roman"
table_field[2] = "Rick C. Hodgin"
table_field[3] = "Foxtools"
table_field[4] = "youtube anuna riu riu"
table_field[5] = "JITTER bug"
table_field[6] = "There once was a man who said ... 'Hi!'"
table_field[7] = "Peanut butter jelly time"
table_field[8] = "LPARAMETERS tcFoo, tnFoosFriend"
table_field[9] = "RETURN .f."
table_field[10] = "RUN /N cmd.exe start /AFFINITY 0x1 \fpw26\foxprow.exe"
DECLARE results[5, 10]
FOR lnRow = 1 TO 5
FOR lnCol = 1 TO 10
results[lnRow, lnCol] = 0.0
NEXT
NEXT
DECLARE names[5]
names[1] = "FOR LOOP"
names[2] = "CHRTRAN AZ_09"
names[3] = "CHRTRAN AZ_az_09"
names[4] = "FOXTOOLS"
names[5] = "C++ DLL"
* Mixer passes:
* 1 - normal
* 2 - upper
* 3 - lower
* 4 - no spaces
FOR lnMixer = 1 TO 4
FOR lnTestIteration = 1 TO ALEN(table_field)
? table_field[lnTestIteration]
* ? names[1] + " " + ALLTRIM(STR(lnTestIteration,2,0))
lcX = ALLTRIM(table_field[lnTestIteration]) && non-binary memo field varying from 0 to ~6,000 bytes
t1=SECONDS()
FOR lnI = 1 TO lnCount
llAN = .t. && flag for "is alphanumeric?"
FOR lnJ = 1 to LEN(lcX)
lcC = SUBSTR(lcX,lnI,1)
IF NOT ISALPHA(lcC) AND NOT ISDIGIT(lcC)
* It is something other than A-Z_a-z_0-9
llAN = .f.
EXIT
ENDIF
NEXT
* llAN holds the AlphaNumeric status
NEXT
results[1, lnTestIteration] = SECONDS()-t1
* ? names[2] + " " + ALLTRIM(STR(lnTestIteration,2,0))
lcAlpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
lcX = UPPER(ALLTRIM(table_field[lnTestIteration]))
t1=SECONDS()
FOR lnI = 1 TO lnCount
llAN = (LEN(CHRTRAN(lcX, lcAlpha, "")) = 0) AND NOT EMPTY(lcX)
NEXT
results[2, lnTestIteration] = SECONDS()-t1
* ? names[3] + " " + ALLTRIM(STR(lnTestIteration,2,0))
lcAlpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
lcX = ALLTRIM(table_field[lnTestIteration])
t1=SECONDS()
FOR lnI = 1 TO lnCount
llAN = (LEN(CHRTRAN(lcX, lcAlpha, "")) = 0) AND NOT EMPTY(lcX)
NEXT
results[3, lnTestIteration] = SECONDS()-t1
** ? names[4] + " " + ALLTRIM(STR(lnTestIteration,2,0))
* SET LIBRARY TO "C:\Program Files (x86)\Microsoft Visual FoxPro 9\FoxTools.fll" ADDITIVE
* lcAlphaNumeric = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
* lcX = ALLTRIM(table_field[lnTestIteration])
* t1=SECONDS()
* FOR lnCount= 1 TO lnCount
* llAN = LEN(lcX) < LEN(StrFilter(lcX,lcAlphaNumeric))
* ENDFOR
* results[4, lnTestIteration] = SECONDS()-t1
* ? names[5] + " " + ALLTRIM(STR(lnTestIteration,2,0))
DECLARE INTEGER utils_is_AZaz09 IN exe\utils.dll STRING@ tcString
lcX = ALLTRIM(table_field[lnTestIteration]) + CHR(0)
t1=SECONDS()
FOR lnCount= 1 TO lnCount
llAN = utils_is_AZaz09(lcX)
ENDFOR
results[5, lnTestIteration] = SECONDS()-t1
NEXT
? ""
? "Mixup pass " + STR(lnMixer,1,0)
FOR lnRow = 1 TO ALEN(results,1)
IF lnRow != 4 && skip foxtools
? " " + names[lnRow] + ":"
lnMin = 10000.0
lnMax = 0.0
lnTot = 0.0
FOR lnCol = 1 TO ALEN(results,2)
lnMin = MIN(lnMin, results[lnRow, lnCol])
lnMax = MAX(lnMax, results[lnRow, lnCol])
lnTot = lnTot + results[lnRow, lnCol]
NEXT
? " Min: " + ALLTRIM(STR(lnMin, 8, 3))
? " Max: " + ALLTRIM(STR(lnMax, 8, 3))
? " Avg: " + ALLTRIM(STR(lnTot / ALEN(results, 2), 8, 3))
ENDIF
NEXT
* Mix everything
FOR lnRow = 1 TO ALEN(table_field)
* Each pass does something different
DO CASE
CASE lnMixer = 1
* Force all upper-case
table_field[lnRow] = UPPER(table_field[lnRow])
CASE lnMixer = 2
* Force all lower-case
table_field[lnRow] = LOWER(table_field[lnRow])
CASE lnMixer = 3
* remove spaces
table_field[lnRow] = STRTRAN(table_field[lnRow], SPACE(1), SPACE(0))
ENDCASE
NEXT
NEXT
SET PRINTER TO
SET CONSOLE ON