Switch, Case und if then kein BUG

  • stark vereinfachtes Script

    [autoit]


    $msg=''
    $Time='a' ; string wert
    Switch $Time
    Case 0 To 23 ; angeben Werte sind als int also dürft das mal nicht stimmen
    if $Time>= 0 and $Time <=23 Then $msg='Hallo und '&@CRLF ; angeben wertr sind int also dürft das mal nicht stimmen
    if $Time>= 6 and $Time <=11 Then
    $msg = $msg&"Guten Morgen"
    EndIf
    if $Time>= 12 and $Time <=17 Then
    $msg = $msg&"Guten Tag"
    EndIf
    if $Time>= 18 and $Time <=21 Then
    $msg = $msg&"Guten Abend"
    EndIf
    if $Time>= 5 and $Time <=22 Then
    $msg = $msg&"Warum bist du noch wach?"
    EndIf
    Case Else ; und müst ja das ausgeben da $time=ein string und im case Int zu Int sein soll
    $msg='Das ist keine Zeit'
    EndSwitch
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msg = ' & $msg & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]
    Zitat


    @@ Debug(21) : $msg = Hallo und

    Habe ich hier irgend wie ein denk fehler???

    Autoit Version 3.3.6.1

    2 Mal editiert, zuletzt von Maniac (12. Juni 2011 um 22:02) aus folgendem Grund: aber ein Integer Binary String Problem

  • $Time = 'a' ist als Integer 0.

    Edit: Switch String($Time)

    so das must du mir mal erklären warum
    'a' der nach VarGetType = String ist
    plötzlich zu einem Integer 0?
    egal welschen String und länge!

    Switch String($Time) gemacht aber dann kommen noch so was vor
    $Time=0x02 gibt falsch aus
    $Time='0x02' gibt falsch aus
    $Time=Binary(0x02) richtig aus

    Einmal editiert, zuletzt von Maniac (12. Juni 2011 um 20:56)

  • Bei $Time >= 0 ist ja die 0 ein Integer, darum nimmt er warsch. den $Time auch als Integer, weil ja nichts angegeben ist.
    Das wäre also das gleiche wie Int($Time) >= 0.
    Durch das Switch String ist es ein String und wird nicht als Int verglichen.
    So meine Vermutung.

  • also bleibt mir nix anders übrig alle vars die ankommen und da durchlafen zu prüfen per hand!?
    was da an kommt z.b.

    $Time=0x002
    $Time=Binary(0x002)
    $Time='0x002'
    $Time='2'
    $Time=2
    $Time='abc'

    jenach dem wie sie an kommen unterschiedlich behandelt werden sollen!

  • Nein, mach es so:

    Edit: Hiermit gehen alle deine Variablen:

    Spoiler anzeigen
    [autoit]

    $msg = ''
    $Time = Binary(0x002); string wert

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If StringIsAlpha($Time) Then
    $msg = 'Das ist keine Zeit'
    Else
    Switch Number($Time)
    Case 0 To 23
    If $Time >= 0 And $Time <= 23 Then $msg = 'Hallo und ' & @CRLF
    If $Time >= 6 And $Time <= 11 Then
    $msg = $msg & "Guten Morgen"
    EndIf
    If $Time >= 12 And $Time <= 17 Then
    $msg = $msg & "Guten Tag"
    EndIf
    If $Time >= 18 And $Time <= 21 Then
    $msg = $msg & "Guten Abend"
    EndIf
    If $Time >= 5 And $Time <= 22 Then
    $msg = $msg & "Warum bist du noch wach?"
    EndIf
    EndSwitch
    EndIf
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msg = ' & $msg & @CRLF & '>Error code: ' & @error & @CRLF)

    [/autoit]