If Kondition mit Zahl will nicht klappen

  • Hi Leute.

    Erstmal eins vorweg. AutoIt ist wirklich klasse. Ich arbeite mit SAP und ich konnte einen Großteil der Abläufe damit automatisieren. Das spart mir locker 60-70%! an Zeit/Schreib/Klickarbeit. 8) Es ist wirklich eine enorme Unterstützung.

    Kommen wir nun zu meinem Problem. Ich kriege es partout nicht hin einen Zahlenwert in eine If Kondition zu stellen. Hier der Code:

    Code
    $hGUI = GUICreate("", 0, 0, 0, 0, Default, $WS_EX_TOPMOST)
    GUISetState(@SW_SHOWNORMAL, $hGUI)
    $number = InputBox("Bestellung einfügen", " ", "", "", 193, 90, 1121, 561, 0, $hGUI)
    $number_length = StringLen($number)
    
    If Not $number_length = "10" Then
        MsgBox($MB_SYSTEMMODAL, "", $number_length, 10) ;Timeout
    EndIf

    Ich möchte erreichen, dass wenn der Wert NICHT 10 ist, die MsgBox aufgehen soll. Ich habe bereits mehrere Varianten durchprobiert. So z.b. auch

    Code
    string($number_length)

    Es will einfach nicht funktionieren. Entweder die Box geht immer auf oder gar nicht. Hat jemand eine Idee wo der Hase im Pfeffer liegt?

    Einmal editiert, zuletzt von LosWochos (6. Mai 2021 um 08:59)

  • Hallo Sascha_77

    hast du schon mal If $number_length <> "10" Then getestet und auch ob in der Variablen der gewünschte Wert und Typ zurückgegeben wird?

  • Habe ich bereits probiert. Der Wert passt. Wenn die Box aufgeht stimmt der Wert bei $numbler_length immer überein. Kann nur noch am Typ liegen. Aber ich weiss nicht wo ich da ansetzen soll. Das was ich probiert habe hat alles nicht funktioniert. Es ist echt merkwürdig. Habe ja schon viele Scripte mit AutoIt mir gebaut aber dieses Problem jetzt ist echt hartnäckig. Zumal es ja nur eine simple If Abfrage ist.

    2 Mal editiert, zuletzt von LosWochos (6. Mai 2021 um 09:38)

  • not $numberlength wird zuerst ausgewertet.
    Wenn also $number_length einen Wert ungleich 0 hat dann wird die Abfrage implizit zu If false = "10" Then.

    Daher entweder so schreiben: If Not ($number_length = 10) Then oder wie bereits geschrieben mit <> als Operator.

    Wichtig ist auch mit 10 (Zahlentyp) zu vergleichen und eben nicht mit "10" (Zeichenkette).
    In dem Fall hier klappt es durch die implizite Konvertierung zwar dennoch aber grundsätzlich ist es erst einmal falsch, da StringLen eine Integerzahl zurückgibt.

  • Was soll ich sagen ... es klappt. :) Es lag also im Grunde nur an den fehlenden Klammern.

    Das hatte ich z.b. auch probiert:

    Code
    If Not $number_length = 10 Then

    Aber wie heissts ... knapp daneben ist auch vorbei. ^^

    Danke jedenfalls.

  • Es lag also im Grunde nur an den fehlenden Klammern.

    Wie AspirinJunkie bereits schrieb, geht es um die Priorität bei der Auswertung von Operatoren.

    Siehe : Operatoren

    Auszug :

    Priorität

    Wenn mehr als ein Operator in einem Ausdruck verwendet werden, bestimmt die Operatorpriorität die Reihenfolge der Verwendung. Die Priorität, die in AutoIt verwendet wird, ist weiter unten aufgelistet. Wenn zwei Operatoren die gleiche Priorität besitzen, wird der Ausdruck von links nach rechts ausgewertet. 

    Von der höchsten zur niedrigsten Priorität: 

    Not

    ^

    * /

    + -

    &

    < > <= >= = <> ==

    And Or

    Man kann Klammern verwenden um zu erzwingen, dass ein Bereich des Ausdrucks zuerst behandelt werden soll.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."