0 = "" (Null gleich leer)

  • Hallo zusammen,

    kann mir jemand erklären, warum Null gleich leer ist?

    [autoit]

    If 0 = "" Then
    MsgBox(0, "", "gleich")
    EndIf

    [/autoit]

    Wie frage ich korrekt ab, ob eine Variable nicht gefüllt ist?

    Gruß
    M3d1c5

  • Hi,

    Wie frage ich korrekt ab, ob eine Variable nicht gefüllt ist?

    Möglich wäre zum Beispiel:

    [autoit]

    StringIsSpace

    [/autoit]


    Prüft, ob ein String nur aus Leerzeichen besteht. Geht allerdings nicht, wenn der String leer ist ("").

    [autoit]

    If 0 == "" Then MsgBox(0, "", "Gleich?")

    [/autoit]


    Die Msgbox bleibt in diesem Fall aus (die Begründung ist mir leider entfallen; auf jeden Fall macht es einen Unterschied, ob "=" oder "==" als Vergleichsoperator benutzt wird; ich glaube allerdings, dass Letzteres ein purer Stringvergleich ist)
    ;)


    Gruß stay

  • Ich danke euch beiden.

    Es funktioniert, wenn ich mit

    [autoit]

    0 == ""

    [/autoit]

    abfrage.

    stayawayknight Du hast Recht:

    Zitat
    Code
    =  Tests if two values are equal.  e.g. If $var= 5 Then    (true if $var equals 5). Case insensitive when used with strings. 
    == Tests if two strings are equal. Case sensitive. The left and right values are converted to strings if they are not strings already. This operator should only be used for string comparisons that need to be case sensitive.

    Gruß
    M3d1c5

  • kann mir jemand erklären, warum Null gleich leer ist?


    Weil immer nur gleiche Datentypen miteinander verglichen werden können.
    Hier vergleichst du aber einen Integerdatentyp mit einem String.
    Einer von beiden muss also vor dem Vergleich in den anderen Datentyp umgewandelt werden damit der Vergleich durchgeführt werden kann.
    Wenn man den String "" in einen Integer wandelt kommt 0 dabei heraus - daher ist das gleich.
    Daher funktioniert die Lösung per ==-Operator da dabei beide zu vergleichende Operanden vorher in einen String gewandelt werden.
    aus 0 wird dann "0".
    Was das selbe Ergebnis wäre als wenn du If String(0) = "" Then schreiben würdest.


    Eher solltest du dir überlegen wie es dazu kommt das du zwei verschiedene Datentypen miteinander vergleichst.
    Sowas sollte man in der Regel vermeiden.

  • Hallo AspirinJunkie,

    vielen Dank für Deine Erläuterungen. :)

    Eher solltest du dir überlegen wie es dazu kommt das du zwei verschiedene Datentypen miteinander vergleichst.
    Sowas sollte man in der Regel vermeiden.

    Ich will prüfen, ob einer Integervariable bereits ein Wert zugewiesen wurde oder nicht.

    Gruß
    M3d1c5

  • Wie du bereits herausgefunden hast ist eine Variable welche man nur deklariert und noch nicht definiert hat erst einmal ein Nullstring.
    Dein Test auf "" ist daher prinzipiell der richtige Ansatz.
    Wie du das lösen kannst weißt du ja jetzt aber nur der Vollständigkeit halber würde ich dir noch vorschlagen mal die Funktion IsNumber() bzw. IsString() anzusehen.
    Damit kannst du den Variablentyp prüfen ohne einen Vergleichsoperator zu verwenden welcher die beschriebenen Probleme der impliziten Typumwandlung mit sich bringt.