in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

09 Apr 2018, 06:32

Hallo,

wie kann ich in einem Ausdruck if (()) überprüfen, ob eine Variable eine nummer ist.
ist gibt den Befehl If Var is [not] Typ der aber in Ausdrücken nicht unterstützt wird.

Folgende IF-Bedinung ist gewünscht:

if (!Feld1) && (Feld2 is not number)

funktioniert aber nicht, da Die Operatoren "between", "is", "in" und "contains" werden in Ausdrücken nicht unterstützt..

Wer hat eine Idee?
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

09 Apr 2018, 07:22

if ( (!Feld1) && !(Feld2&0 == 0) )
Wenn man eine Zahl mit 0 multipliziert ergibt das immer 0.
Gleiches gilt auch bei dem & operator. Wenn Feld2 allerdings keine Zahl ist dann ergibt das ganze allerdings einfach nur "" und nicht 0.
Das ist ein sicherer Weg um dies zu prüfen.
Recommends AHK Studio
wolf_II
Posts: 2688
Joined: 08 Feb 2015, 20:55

Re: in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

09 Apr 2018, 08:34

Folllast wrote:...
Ist gibt den Befehl If Var is [not] Typ der aber in Ausdrücken nicht unterstützt wird.
...
Wer hat eine Idee?
Versuch mal die Funktion:

Code: Select all

;-------------------------------------------------------------------------------
isType(ByRef Var, Type) { ; boolean
;-------------------------------------------------------------------------------
    If Var is %Type%
        Return, True
}
I hope that helps.
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

09 Apr 2018, 23:48

Danke euch beiden.

was genau macht der & Operator? die Dokumentation ist leide nicht so aufschlussreich.

Danke für eure Tips, hat sehr geholfen!
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

09 Apr 2018, 23:57

nnnik wrote:if ( (!Feld1) && !(Feld2&0 == 0) )
Wenn man eine Zahl mit 0 multipliziert ergibt das immer 0.
Gleiches gilt auch bei dem & operator. Wenn Feld2 allerdings keine Zahl ist dann ergibt das ganze allerdings einfach nur "" und nicht 0.
Das ist ein sicherer Weg um dies zu prüfen.
if ((!Feld1) && !(Feld2&0 == 0) &&(Feld2))

Hinzu kam noch eine dritte Bedingung, die Prüft, ob "Feld2" auch wirklich einen Wert enthält, da die IF Bedingung if ( (!Feld1) && !(Feld2&0 == 0) ) auch als WAHR gilt, wenn beide Werte "Leer" sind.


da stellt sich mir die Frage: wieviel Bedingungen kann man denn maximal stellen? Gibt es da eine limitierung vom Programm her oder ist die einzige Grenze der Arbeitsspeicher oder so....
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

10 Apr 2018, 00:54

Aufgrund der Limitationen des Jetzigen AutoHotkey Frameworks kannst du maximal 127 - 255 Teilausdrücke in einen Ausdruck schreiben.
Recommends AHK Studio
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

10 Apr 2018, 03:11

:arrow: Bitweiser Operator

Das 'Bitweise Und' & vergleicht die Bits zweier Zahlen so, dass als Ergebnis eine 1 für die jeweilige Bitstelle geliefert wird, wenn das Bit in beiden Zahlen 1 (gesetzt) ist, anderenfalls eine 0. Weil die Zahl 0 keine Bitstelle mit dem Wert 1 enthält, ist das Ergebnis von Variable & 0 immer 0. AHK prüft aber vor der Verknüpfung, ob Variable überhaupt einen gültigen numerischen Wert enthält. Wenn nicht, wird als Ergebnis die leere Zeichenfolge "" geliefert.

Der Ausdruck ((Variable & 0) = 0) ist deshalb nur dann wahr, wenn Variable einen gültigen numerischen Wert enthält.

Alternativ kann man auch mathmatische Operationen wie ((Variable + 0) <> "") verwenden. Auf CPU-Ebene sind die bitweisen Operationen aber schneller. In Zeiten, in denen man schwachbrüstigen Rechnern anstrengende Aufgaben aufhalsen musste, konnte das durchaus von Bedeutung sein.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 20 guests