_InList() - mehrfache ODER-Verknüpfung

    • 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.

    [autoit]

    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:

    [autoit]

    If _InList($varCheck, 0, $var1, $var2, $var3, $var4) Then

    [/autoit]
    _InList()
    [autoit]

    ;===============================================================================
    ; 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

    [/autoit]
  • Hallo BugFix.

    Könntest Du "Case sensitiver Vergleich möglich" etwas genauer erklären?
    Ich kenne zwar die "Sensitivitätsformel", aber wie soll man dieses im Scriptbereich verstehen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo BugFix.

    Dann habe ich es doch richtig verstanden.
    Es sind zwar beides die gleichen Buchstaben, aber einmal klein und einmal groß geschrieben.

    Vielen Dank für die Info.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl