Verschachtelte If-Funktion

  • Hi zusammen,

    ich erstelle gerade ein Funktion, in der ich eine verschachtelte If-Abfrage eingebaut habe.
    Allerdings finde ich das nicht so schön, da das immer mehr werden könnte.
    Nun stellt sich mir die Frage ob es da wohl eine elegantere Lösung gibt? Evtl. Select oder Switch.
    Bin etwas ratlos und benötige dringend Hilfe. ?( :wacko:

    Hier mal mein Skript:

  • Ok, ich versuch mal was zusammenfassen:
    Es gibt verschiedene Installationspakete, die aus einer Gesamtinstallationsroutine aufgerufen werden. Wenn diese erfolgreich installiert wurden,
    dann wird in der Registry ein Flag gesetzt. Diese Flags möchte ich in der Check_Install-Funktion abfragen und dann einen Flag für die Gesamtinstallation setzen.
    Diese Installationspakete werden in einer vorbestimmten Abhängigkeit zueinander installiert, weshalb ich die verschachtelte If-Abfrage eingesetzt habe.

    LG
    erikl

  • Ich würds so machen:
    besser wärs in nem array: Also mach anstatt $install_1 usw.. lieber $install[1], dann kann man des per schleife abfragen

    [autoit]

    $success = True
    For $i = 1 To Ubound($install)-1
    If $install[$i] <> $RegEntrySuccess Then
    $success = False
    ExitLoop
    EndIf
    Next
    if $success = true Then
    ;erfolgreich
    Else
    ;fehlgeschlagen
    EndIf

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hab deine Abfrage mal auf 3 Programme beschränkt, aber meine Logik sollte deutlich werden ;)

    [autoit]

    If ($Install_1 + $Install_2 + $Install_3) = 3 * $RegEntrySuccess Then
    $Status_Installation = "erfolgreich"
    Else
    $Status_Installation = "fehlgeschlagen"
    EndIf

    [/autoit]

    Wichtig hierbei wäre, dass der Status von $Install_1 (und allen anderen) nur zwei Werte annehmen kann, wobei $RegEntrySuccess <> 0 sein sollte.

    • Offizieller Beitrag

    So gehts z.B.:

    Spoiler anzeigen
    [autoit]

    Func _CheckInstall()
    _ImportRegData()
    Local $err = 0
    Select
    Case $Version = 40
    For $i = 1 To 11
    Execute('If $Install_' & $i & ' <> $RegEntrySuccess Then $err += 1')
    Next
    If $err = 0 Then
    MsgBox(0, 'Installation', 'Erfolgreich')
    Else
    MsgBox(0, 'Installation', 'Fehlgeschlagen' & @LF & $err & ' Fehler.')
    EndIf
    EndSelect
    EndFunc

    [/autoit]

    Allerdings bleibt die Frage, woher die Variablen $Install_1 bis $Install_11 kommen. Sie müssen in diesem Fall Global deklariert sein - sonst wird sie die Funktion nicht erkennen.

  • und das andere script kannst du nicht so umschreiben das es keine einzelnen variablen sind sondern ein array?
    Da haste zwar erstmal "viel" arbeit das umzuschreiben (naja eigentlich nicht^^: Strg+H Replace $install_1 With $install[1]) aber es lohnt sich danach bestimmt :)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Klar kann ich das. ;)
    Ich kenn mich zwar sehr wenig mit Arrays aus, aber ich kann's ja mal versuchen.

    Auf jeden Fall bedanke ich mich für die vielen tollen Tipps. :thumbup:
    Ich schau mir das mal an und probier die Tipps mal durch und dann seh ich schon mit welchem ich am besten zu Rande komme.

  • ändert sich die anzahl von diesen Dingsbums $install teilen da? Ne oder?

    Also auf jeden fall das Array so deklarieren: Global $install[11] (wenn es 10 sind dann 11, immer plus 1)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Also die Anzahl ändert sich in dieser Version nicht.
    Aber in der nächsten Version der Gesamtinstallation durchaus.
    Wieso denn immer plus 1? Wegen dem Index?

  • jaa ich weiss, ich wollt ihn jetzt nicht verwirren...

    Aber Bugfix hat schon recht, Bei einem Array ist der erste Index 0 deswegen wenn du 10 Werte für ein Array hast deklarierst du es so:
    Global $array[10]
    Aber abfragen tust du es von $array[0] bis $array[9]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • da hab ich mir schon angewöhnt, analog zu den UDFs ins erste Feld die Anzahl der Datensätze zu schreiben also bei einem $array[10] steht im $array[0] = 10

    dann kann man in den Schleifen auf das Ubound($array) - 1 "verzichten" und kommt mit den Zählern nicht durcheinander ...

    kommt aber immer auf der Programm an denke ich ;)

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

    • Offizieller Beitrag

    da hab ich mir schon angewöhnt, analog zu den UDFs ins erste Feld die Anzahl der Datensätze zu schreiben also bei einem $array[10] steht im $array[0] = 10

    dann kann man in den Schleifen auf das Ubound($array) - 1 "verzichten" und kommt mit den Zählern nicht durcheinander ...

    kommt aber immer auf der Programm an denke ich ;)


    Ist immer die Frage, ob es Sinn macht den Zähler zu führen.
    Ist das Array dynamisch, braucht man das nicht - da läßt sich jederzeit mit UBound die Größe abfragen. Bei einem statischen Array kann das durchaus Sinn machen.
    Also gilt wie so oft: Das kommt ganz drauf an.. :rofl: