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

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: in einem Ausdruck überpfüfen, ob eine Variable eine Zahl ist

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

Post by just me » 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.

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

Post by nnnik » 10 Apr 2018, 00:54

Aufgrund der Limitationen des Jetzigen AutoHotkey Frameworks kannst du maximal 127 - 255 Teilausdrücke in einen Ausdruck schreiben.

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

Post by Folllast » 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....

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

Post by Folllast » 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!

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

Post by wolf_II » 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.

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

Post by nnnik » 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.

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

Post by Folllast » 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?

Top