IsNumber() und Zahlen in Textvariablen

  • Nachdem mich das Problem schlaflose Minuten :Glaskugel:gekostet hat bis ich hier im Forum einen Artikel dazu gefunden habe, bleibt doch offen: warum sieht AutoIt keine brauchbare Alternative dazu vor?

    $sVar = "123"

    IsNumber($sVar) liefert "False", nur weil die Zahl in einem Text steht

    Workaround mit Number($sVar) funktioniert nicht, da z.B. eine "0" und ein Text beide "0" ergeben.

    So geht es:

    Func _IsNumber($sVar)

    Return StringRegExp($sVar, "^\d*$")

    EndFunc

    Das wäre doch eine sinnvolle Erweiterung, die direkt in AutoIt implementiert sein sollte!?

    :)

  • HansJ54 :

    Du kannst Dir auch den folgenden Thread anschauen : funktion-number-von-bugfix

    Dort hat BugFix eine erweiterte Version (Spoiler 0.4 im Startpost) erstellt.

    Hier zur Sicherheit noch mal der Quelltext :

    Gruß Musashi

    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."

  • warum sieht AutoIt keine brauchbare Alternative dazu vor?

    Die angesprochene Alternative würde aber inhaltlich etwas völlig anderes machen. IsNumber prüft den Datentyp einer Variable. Du hingegen möchtest aber den Wert einer Variable geprüft haben. Im Grunde was völlig verschiedenes.

    Neben den angesprochenen Selbstbaulösungen gibt es aber auch noch die eingebauten stringisfloat und stringisint. Die beiden zusammen mit IsNumber per or verknüpft sollten den Ziel erstmal gut erfüllen. Es fehlen dann aber immer noch die Exponentialschreibweise sowie die hexadezimale representation.

  • Ich brauchte eine Funktion, die bei der Eingabe über InputBox entscheidet, ob der User eine Zahl (0-99) oder einen Text eingegeben hat. Das funktioniert mit RegEx einwandfrei - mich wundert nur, warum eine solche simple aber sicher öfters benötigte Funktion, zumindest später im Laufe der 12 Jahre seit BugFix'ens Thread, nicht in AutoIt implementiert wurde. Wird AutoIt nicht weiterentwickelt?

    :)

  • Ich brauchte eine Funktion, die bei der Eingabe über InputBox entscheidet, ob der User eine Zahl (0-99) oder einen Text eingegeben hat

    Deine individuelle Problemstellung lautet also zu prüfen ob ein String nur aus Zahlen besteht?

    Diese Prüfung ist - wie du schreibst - ganz einfach mit der eingebauten Funktion StringRegExp abgefrühstückt.

    Aber du willst für dein Problem dennoch eine völlig eigene Funktion? - richtig?

    Ich habe dich bereits auf StringIsInt() hingewiesen. Auch StringIsDigit() ist bereits in AutoIt integriert.

    Warum sind diese für deine Problemstellung nicht hinreichend geeignet?

    mich wundert nur, warum eine solche simple aber sicher öfters benötigte Funktion, zumindest später im Laufe der 12 Jahre seit BugFix'ens Thread, nicht in AutoIt implementiert wurde.

    Die Funktion von Bugfix macht doch was ganz anderes als, dass was du als Ziel beschrieben hast. Du willst prüfen ob ein String nur aus 0-9-Zeichen besteht und BugFix` _Number konvertiert einen String in einen Zahlentyp. Der String 3 Chinesen mit dem Kontrabass würde sowohl mit der eingebauten Funktion Number(), als auch mit BugFix` _Number() den Wert 3 zurückgeben. Bei dir sollte hingegen False zurückgegeben werden.

    Einmal editiert, zuletzt von AspirinJunkie (1. Juni 2020 um 15:02)

  • Ich brauchte eine Funktion, die bei der Eingabe über InputBox entscheidet, ob der User eine Zahl (0-99) oder einen Text eingegeben hat.

    Da haben wir mal wieder ein XY-Problem. Ein Input-Ctrl im Style ES_NUMBER nimmt dir diese Überprüfung ab und lässt nur Zahlenwerte zu.

    Apropos XY-Problem !

    HansJ54 : Verwendest Du InputBox oder GUICtrlCreateInput ?

    Den Style $ES_NUMBER gibt es bei InputBox nicht - daher auch die Anmerkung von BugFix : "... Input-Ctrl im Style ES_NUMBER ...').

    Allerdings wird mit dem Style $ES_NUMBER auch nur geprüft, ob eingegebene Zeichen innerhalb von [0..9] liegen, d.h. eine Eingabe von z.B. 0001 ist zulässig.

    In beiden Fällen wäre also eine weitere Prüfung auf den Bereich (0-99) erforderlich.

    Gruß Musashi

    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."

  • Ich benutze Inputbox und erwarte entweder die Nummer oder den Namen des gewünschten Fensters, das in den Vordergrund soll. Entsprechend der Eingabe nutze ich dann das entsprechende vorher gespeicherte Handle um das Fenster nach vorne zu holen. Folglich kommt als Antwort entweder eine Zahl oder ein Text aus der Inputbox. Eine Einschränkung auf 0-9 passt daher nicht, sondern ich schaue mir einfach die Eingabe an.

    Gerade noch gelesen: StringIsInt() erfüllt den Zweck auch, warum habe ich das nicht gefunden ;)

    Aber danke für die Unterstützung!

    Gruß Hans Jürgen

    :)

  • Du hast absolut recht, StringIsDigit() ist besser - das hatte ich überlesen.

    Jeep, in deinem Fall... hatte mich schon wegen deiner Reaktion gewundert... aber wenn du so wichtige Botschaften einfach überliest... dann Schande über Dich und deine Nachkommen! :rofl:

  • Jeep, in deinem Fall... hatte mich schon wegen deiner Reaktion gewundert... aber wenn du so wichtige Botschaften einfach überliest... dann Schande über Dich und deine Nachkommen! :rofl:

    Das ist altersgerecht - warte auf meine nächste Frage, ich schäme mich jetzt schon ... :Glaskugel:

    :)