Ich sucher derzeit nach einer Funktion mit der man schnell erkennen kann ob eine Variable C/PB - Konform ist. d.h. sie darf aus a-z,A-Z,0-9 und _ bestehen und nicht mit einer Zahl beginnen. Die Länge des Namens spielt keine Rolle und wir nehmen auch einmal an das sie kein Pointer ist (kein *).
Ich hab bereits eine, meiner Meinung nach, schnelle Funktion geschrieben.
Nun frage ich ich mich: Geht es noch schneller? Ich wüsste keine schnellere Methode ausser vielleicht in Assembler, aber dazu reichen meine Kentnisse nicht aus. Die Funktion ist zeitkritisch, kann sein das sie einige millionen mal aufgerufen werden muss.
Hier ist mein Code, vielleich kann ihn noch jemand optimieren:
Code: Alles auswählen
Macro isValidChar(_Char)
; Gültige Zeichen
((_Char<58) And (_Char>47)) Or ((_Char<123) And (_Char>96)) Or ((_Char<91) And (_Char>64)) Or _Char = 95
EndMacro
Procedure isValidVariableName(*VarMem.Character)
If *VarMem\c<58 And *VarMem\c>47 ; Keine Zahlen am Anfang
ProcedureReturn 0
EndIf
While *VarMem\c
If Not isValidChar(*VarMem\c) ; Jedes Zeichen prüfen.
ProcedureReturn 0
EndIf
*VarMem + 1
Wend
ProcedureReturn 1 ; Variable ist ok
EndProcedure
time = ElapsedMilliseconds()
For i = 1 To 100000
isValidVariableName(@"_char1")
isValidVariableName(@"0invlaid")
isValidVariableName(@"sehrlangername")
Next
Debug ElapsedMilliseconds()-time