Split to Options

  • Ich hatte das problem das ich einen Functionsparameter machen wollte wie z.b beim

    [autoit]

    FileOpen() ; 2. Parameter

    [/autoit]

    also z.b

    [autoit]

    FileOpen($file,1+16)

    [/autoit]

    öffnet die datei im Writemode und im Binarymode.

    also hab ich es so gemacht:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    bsp1(1 + 2 + 16)
    bsp2(1 + 2 + 8)

    [/autoit] [autoit][/autoit] [autoit]

    Func bsp1($int)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(@CRLF & @CRLF & "#### Beispiel 1 ###"&@CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    $aOptions = Split_To_Options($int)
    If _ArraySearch($aOptions, 1) <> -1 Then _Func1()
    If _ArraySearch($aOptions, 2) <> -1 Then _Func2()
    If _ArraySearch($aOptions, 4) <> -1 Then _Func4()
    If _ArraySearch($aOptions, 8) <> -1 Then _Func8()
    If _ArraySearch($aOptions, 16) <> -1 Then _Func16()
    EndFunc ;==>bsp1

    [/autoit] [autoit][/autoit] [autoit]

    Func bsp2($int)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(@CRLF & @CRLF & "#### Beispiel 2 ###"&@CRLF)
    $aOptions = Split_To_Options($int)
    For $i = 1 To UBound($aOptions) - 1
    If $aOptions[$i] = 1 Then
    ConsoleWrite(1 & "<-- war enthalten!" & @CRLF)
    EndIf
    Next
    For $i = 1 To UBound($aOptions) - 1
    If $aOptions[$i] = 2 Then
    ConsoleWrite(2 & "<-- war enthalten!" & @CRLF)
    EndIf
    Next
    For $i = 1 To UBound($aOptions) - 1
    If $aOptions[$i] = 4 Then
    ConsoleWrite(4 & "<-- war enthalten!" & @CRLF)
    EndIf
    Next
    For $i = 1 To UBound($aOptions) - 1
    If $aOptions[$i] = 8 Then
    ConsoleWrite(8 & "<-- war enthalten!" & @CRLF)
    EndIf
    Next
    For $i = 1 To UBound($aOptions) - 1
    If $aOptions[$i] = 16 Then
    ConsoleWrite(16 & "<-- war enthalten!" & @CRLF)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>bsp2

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Split_To_Options($zahl)
    $aBin = StringSplit(_IntToBin($zahl), "")
    Dim $aOptions[1], $a
    For $i = UBound($aBin) - 1 To 1 Step -1
    $a += 1
    If $aBin[$i] = 1 Then _ArrayAdd($aOptions, 2 ^ $a / 2)
    ;~ ConsoleWrite("$aBin[" & $i & "]= " & $aBin[$i] & @CRLF) ;Debug
    Next
    Return $aOptions
    EndFunc ;==>Split_Int_To_Options

    [/autoit] [autoit][/autoit] [autoit]

    Func _IntToBin($Value); von BugFix
    $bin = ''
    Do
    $bin = Mod($Value, 2) & $bin
    $Value = Floor($Value / 2)
    Until $Value = 0
    Return $bin
    EndFunc ;==>_IntToBin

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _func1()
    ConsoleWrite("die Funktion Nr. 1 wurde aufgerufen"&@crlf)
    EndFunc ;==>_func1
    Func _func2()
    ConsoleWrite("die Funktion Nr. 2 wurde aufgerufen"&@crlf)
    EndFunc ;==>_func2
    Func _func4()
    ConsoleWrite("die Funktion Nr. 4 wurde aufgerufen"&@crlf)
    EndFunc ;==>_func4
    Func _func8()
    ConsoleWrite("die Funktion Nr. 8 wurde aufgerufen"&@crlf)
    EndFunc ;==>_func8
    Func _func16()
    ConsoleWrite("die Funktion Nr. 16 wurde aufgerufen"&@crlf)
    EndFunc ;==>_func16

    [/autoit]

    Vieleicht braucht das ja jemand
    Wenn ja viel spaß damit! ;)

    P.S.:(ist warscheinlcih umständlich gescriptet) ;)