Rückgabewert in leerer Variable

  • Hallo Gemeinde,

    ich hatte schon mehrmals folgendes Prob:

    die Abfrage eines Namespaces liefert immer mal wieder eine leere Rückgabe, da die Eigenschaft keinen Wert enthält. Wie im CodeBeispiel $s_Breite und $s_Hoehe.

    Wie kann man herausfinden welches "Leerzeichen" da zurückgegeben wird?

    If $s_Breite = "" Then... z.b. funktioniert meistens nicht. Ebenso " "...

  • Ich bin nicht sicher ob ich das Problem verstanden habe, aber hier der übliche Lösungsweg:

    - Denke dir einen "Errorwert" aus (in den Meisten fällen ist das Int32 -1, also $s_Breite = -1)

    - Prüfe am Ende, ob dein Wert -1 ist (If $s_Breite = -1 Then ...) um herauszufinden ob ein Wert gesetzt wurde.

    Alternativ kann man auch ausnutzen, dass AutoIt einen Variant Datentyp hat. Wenn du exakt weißt, dass der Wert zu einem String (egal ob leer, oder voll) wird, dann initialisiere sie z.B. als Int32 (z.B. $s_Breite = 0). Anschließend kannst du via If IsInt($s_Breite) Then ... prüfen ob die Variable von irgendwem gesetzt wurde. Ein richtiger Errorwert wie -1 ist aber idr die bessere Idee.

    lg

    M

  • Generell kommt es ja auf den zu erwartenden Rückgabewert an.

    Wäre es in diesem Fall nicht einfacher zu prüfen, ob die beiden Variablen größer 0 sind?

    Denn Breite und Höhe sollten ja nur Zahlenwerte sein, ich würde daher eher so prüfen:

    AutoIt
        $s_Breite = Int($s_Breite)
        $s_Hoehe  = Int($s_Hoehe)
        If not ($s_Breite > 0) or _
           not ($s_Hoehe  > 0) then
            Return False
        Else
            Return True ;Nur als Beispiel, ich weiß nicht in welcher Form du die Werte zurück geben willst.
        EndIf
  • WMI setzt nichtbelegte Attribute auf NULL.
    Null ist kein Leerstring und kann auch nicht mit diesem verglichen werden.

    Deine Abfrage muss hier also If $objItem.ScreenWidth = null Then lauten oder ganz explizit If IsKeyword($objItem.ScreenWidth) = 2 Then.

    Wenn du Zweifel hast, was dir zurückgegeben wird, dann frage am besten den Datentyp mit VarGetType() ab damit du weißt womit du es zu tun hast.

    Wenn es dir hingegen darum geht die Datensätze zu überspringen, welche dort null stehen haben, dann kannst du das auch direkt beim Select filtern:

    Code
    SELECT * FROM Win32_DesktopMonitor WHERE ScreenHeight IS NOT NULL AND ScreenWidth IS NOT NULL
  • Vielen lieben Dank für eure Antworten.

    Aaaaaahhhh, na klar. ich hatte NULL gar nicht im Focus. Ich werde das überprüfen. Bis dahin alen eine schönes langes WE. :rock: