- Offizieller Beitrag
Hi,
es kommt häufig vor, dass man per mehrfacher ODER-Verknüpfung prüfen muß, ob eine Variable einen von mehreren möglichen Werten besitzt.
z.B.
If ($varCheck = $var1) Or ($varCheck = $var2) Or ($varCheck = $var3) Or ($varCheck = $var4) Then
[/autoit]Das läßt sich mit der Funktion _InList() syntaktisch einfacher darstellen und ist m.E. auch einfacher zu lesen. Da ein Case sensitiver Vergleich möglich ist, muß als zweiter Parameter entsprechend '0' oder '1' übergeben werden.
Die Funktion erlaubt die Übergabe von bis zu 10 Vergleichswerten. Eine größere Anzahl macht eigentlich auch keinen Sinn, denn dann ist es sicher besser die Werte in ein Array zu stecken und mit _ArraySearch() zu arbeiten.
Die Vorbelegung der Operanden mit '-0' hat den Hintergrund, dass dies wahrscheinlich der einzigste Wert ist, den eine Variable i.A. wohl niemals annehmen wird - und somit geeignet ist zu prüfen, ob der Operand belegt ist.
Dieselbe Abfrage wie oben:
If _InList($varCheck, 0, $var1, $var2, $var3, $var4) Then
[/autoit]_InList()
;===============================================================================
; Function Name: _InList($var, $CaseSens, $op1, $op2='-0', $op3='-0', $op4='-0', $op5='-0', $op6='-0', $op7='-0', $op8='-0', $op9='-0', $op10='-0')
; Description:: Prüft auf Übereinstimmung einer Variablen mit bis zu 10 Operanden (min 1) einer Auflistung
; Es kann Case Sensitiv geprüft werden
; Parameter(s): $var die Variable
; $CaseSens 1 = Case Sensitiv; 0 (oder alles <> 1) = nicht CS
; $op1..10 die Listenelemente
; Return Value(s): True bei Übereinstimmung, sonst False
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _InList($var, $CaseSens, $op1, $op2='-0', $op3='-0', $op4='-0', $op5='-0', $op6='-0', $op7='-0', $op8='-0', $op9='-0', $op10='-0')
Local $match = 0
For $i = 1 To 10
If $match Then Return True
If $CaseSens = 1 Then
If Eval("op" & $i) == '-0' Then ExitLoop
If $var == Eval("op" & $i) Then $match += 1
Else
If Eval("op" & $i) == '-0' Then ExitLoop
If $var = Eval("op" & $i) Then $match += 1
EndIf
Next
Return False
EndFunc ;==>_InList