BarryG
From yesterday's tests, I found out that FindString() is 13 times faster than "While *c\c"
I made it 5% faster since the Mid() function is slower than "While *c\c"
Code: Select all
EnableExplicit
DisableDebugger
Procedure ValidChar(*c.Character, Validchar$)
If Not Asc(Validchar$)
ProcedureReturn #True
EndIf
While *c\c
If Not FindString(Validchar$, Chr(*c\c))
ProcedureReturn #False
EndIf
*c + SizeOf(Character)
Wend
ProcedureReturn #True
EndProcedure
Procedure InValidChar(*c.Character, InValidChars$)
If Not Asc(InValidChars$)
ProcedureReturn #False
EndIf
While *c\c
If FindString(InValidChars$, Chr(*c\c))
ProcedureReturn #True
EndIf
*c + SizeOf(Character)
Wend
ProcedureReturn #False
EndProcedure
Define ValidChars$=" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Define InValidChars$ =";,:._-()/&%"
Define t, i, c = 100000
t = ElapsedMilliseconds()
For i=0 To c
ValidChar(@"test1", ValidChars$)
ValidChar(@"test1_", ValidChars$)
Next
EnableDebugger
Debug Str(ElapsedMilliseconds()-t)
DisableDebugger
t = ElapsedMilliseconds()
For i=0 To c
InValidChar(@"test1", InValidChars$)
InValidChar(@"test1_", InValidChars$)
Next
EnableDebugger
Debug Str(ElapsedMilliseconds()-t)
Debug ValidChar(@"test1", ValidChars$)
Debug ValidChar(@"test1_", ValidChars$)
Define InValidChars$ = ";,:._-()/&%"
Debug InValidChar(@"test1", InValidChars$)
Debug InValidChar(@"test1_", InValidChars$)
Two in one
Code: Select all
EnableExplicit
DisableDebugger
Procedure ValidChar(*c.Character, Char$, Allow)
If Not Asc(Char$)
ProcedureReturn Allow
EndIf
While *c\c
If Bool(FindString(Char$, Chr(*c\c))) <> Allow
ProcedureReturn Bool(Not Allow)
EndIf
*c + SizeOf(Character)
Wend
ProcedureReturn Allow
EndProcedure
Define ValidChars$=" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Define InValidChars$ =";,:._-()/&%"
Define t, i, c = 100000
t = ElapsedMilliseconds()
For i=0 To c
ValidChar(@"test1", ValidChars$, 1)
ValidChar(@"test1_", ValidChars$, 1)
Next
EnableDebugger
Debug Str(ElapsedMilliseconds()-t)
DisableDebugger
t = ElapsedMilliseconds()
For i=0 To c
ValidChar(@"test1", InValidChars$, 0)
ValidChar(@"test1_", InValidChars$, 0)
Next
EnableDebugger
Debug Str(ElapsedMilliseconds()-t)
Debug ValidChar(@"test1", ValidChars$, 1)
Debug ValidChar(@"test1_", ValidChars$, 1)
Debug ValidChar(@"test1", InValidChars$, 0)
Debug ValidChar(@"test1_", InValidChars$, 0)
Mid(), improvement of the code created by the author BarryG
Code: Select all
EnableExplicit
Procedure MatchChars(String$, Char$, Allow)
Protected Length, i
If Not Asc(Char$)
ProcedureReturn Allow
EndIf
Length = Len(String$)
For i = 1 To Length
If Bool(FindString(Char$, Mid(String$, i, 1))) <> Allow
ProcedureReturn Bool(Not Allow)
EndIf
Next
ProcedureReturn Allow
EndProcedure
Define ValidChars$ = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Define InValidChars$ = ";,:._-()/&%"
Debug MatchChars("test1", ValidChars$, 1)
Debug MatchChars("test1_", ValidChars$, 1)
Debug MatchChars("test1", InValidChars$, 0)
Debug MatchChars("test1_", InValidChars$, 0)
Speed measurement results
(For + Len + Mid) * 2 (Splunk)
4399
500
RegularExpression (STARGÅTE)
859
438
While+While (AZJIO) fixed for variable pointers
143
30
StrToArrLetter (AZJIO)
1652
523
FindString + Mid (BarryG)
133
79
While+FindString (AZJIO) fixed for variable pointers
109
52