Schleifen-Problem

  • Hey liebe Autoit.de-Community,

    Ich würde gerne eine Schleife erstellen die so funktioniert:

    Wenn $Var = 1 ist wird Operation 1 ausgeführt.
    Wenn $Var = 2 ist wird Operation 1 und 2 ausgeführt.
    Wenn $Var = 3 ist wird Operation 1, 2 und 3 ausgeführt.
    Wenn $Var = 4 ist wird Operation 2 und 4 ausgeführt.

    Eine Operation ist/sind eine oder mehrere Funktionen.

    Ich schaff es aber irgendwie nicht, hab alles probiert mit If- und Case-Schleifen. ;(

  • [autoit]

    If $var=1 Then
    Mach1()
    ElseIf $var=2
    Mach1()
    Mach2()
    ElseIf $var=3
    Mach1()
    Mach2()
    Mach3()
    ElseIf $var=4
    Mach2()
    Mach4()
    EndIf

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

    Func Mach1()
    bla und blub...
    EndFunc

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

    .
    .
    .

    [/autoit]

    In ne Schleife, ( die Funktionen nicht, die kommen immer ans Ende des Scripts ).

  • Ein ganz großes danke, so funktioniert es 8), aber das kann ziemlich viel Text werden bei mir, desswegen gibt es nicht ne möglichkeit mit der man >=1 definiert und dann die Schleif aufbaut??

  • Ich bin am erstellen von Silent-Installer- Scripten, ich möchte das die Script sehr anpassungs freudig sind, in Sachen Verknüpfungen und Optionen :D

    warum geht das nicht?


    [autoit]

    $DeleteUselessFiles = 2

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

    Select
    Case $DeleteUselessFiles >= 1
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    Case $DeleteUselessFiles >= 2
    FileDelete($Ordner & "\XXXX.xxx")
    EndSelect

    [/autoit]
  • Bei Switch und Select gibt es immer nur einen Zweig, der ausgeführt wird, der erste, der passt. Deswegen:

    [autoit]

    $DeleteUselessFiles = 2

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

    Select
    Case $DeleteUselessFiles = 1 ; ;)
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    Case $DeleteUselessFiles >= 2
    FileDelete($Ordner & "\XXXX.xxx")
    EndSelect

    [/autoit]

    Edit: Hab ja ganz 'ContinueCase' vergessen, damit kann man natürlich mehrere Cases auf einmal durchmachen.

  • Ich möchte das wenn der Wert = 1 nur der Erste Case ausgeführt wird, und wenn der Wert = 2 beide Cases ausgeführt werden.

    Wenn ich ContinueCase eigeben macht er egal obs stimmt weiter ?(

  • Mit If hab ich ja das selbe Problem, dan muss ich in jedes IF (oder ElseIf) alle Funktionen rein schreiben ;( , gibts keine weitere Möglichkeit ?(

    • Offizieller Beitrag

    Du könntest die Abarbeitungs-Reihenfolge ändern (vom höchsten Wert hin zum Niedrigsten):

    [autoit]


    $a = 2
    If $a >= 2 Then MsgBox(0,0,'2')
    If $a >= 1 Then MsgBox(0,0,'1')

    [/autoit]


    oder Du benutzt den Binärcode:

    [autoit]


    $a = 9 ; 8+1
    If BitAND($a, 1) Then MsgBox(0,0,'1')
    If BitAND($a, 2) Then MsgBox(0,0,'2')
    If BitAND($a, 4) Then MsgBox(0,0,'4')
    If BitAND($a, 8) Then MsgBox(0,0,'8')

    [/autoit]
  • Aber was bringt dan ContinueCase?? Dan kann man so gut wie alles in einen Case reinhauen :/

    Kann man nicht irrgendwie angeben das Case (1) = C1 ist, und im Case 2 dan Case (1) + Funktionen angeben?

  • Haha durch logisches Denken gelöst :rock:

    [autoit]


    Switch $DeleteUselessFiles
    Case 2
    FileDelete($Ordner & "\XXXX.xxx")
    ContinueCase
    Case 1
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    FileDelete($Ordner & "\XXXX.xxx")
    EndSwitch

    [/autoit]