If/Else ok Switch/Case Bug ???

  • Hallo miteinander, woher kommt der Unterschied??? Bei der zweiten Variante wird für die aktuelle Kalenderwoche ein falscher Wert zurückgegeben.

    So ist es richtig:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

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

    ConsoleWrite('kw ' & _WeekNumberISO() & @LF)

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

    ConsoleWrite('kw für letzte Woche ist: ' & _KW_IF(2)&@LF)
    ConsoleWrite('kw für diese Woche ist: ' & _KW_IF(0)&@LF)
    ConsoleWrite('kw für nächste Woche ist: ' & _KW_IF(1)&@LF)
    ConsoleWrite('Fehler: ' &@error&@LF)

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

    Func _KW_IF($kw)
    ;~ ConsoleWrite('Wert $kw= ' & $kw & @LF)
    If $kw = 0 Then ;aktuelle Woche
    $ret = _WeekNumberISO()
    ElseIf $kw = 1 Then ;nächste Woche
    $s_string =StringSplit(_DateAdd('d', 7, _NowCalcDate()), '/')
    $ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
    ElseIf $kw = 2 Then ;letzte Woche
    $s_string =StringSplit(_DateAdd('d', - 7, _NowCalcDate()), '/')
    $ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
    Else
    MsgBox(16,'','Es wurde kein gültiger Parameter übergeben.')
    EndIf
    Return $ret
    EndFunc

    [/autoit]

    So ist es falsch - warum:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

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

    ConsoleWrite('kw ' & _WeekNumberISO() & @LF)

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

    ConsoleWrite('kw für letzte Woche ist: ' & _KW_SWITCH(2)&@LF)
    ConsoleWrite('kw für diese Woche ist: ' & _KW_SWITCH(0)&@LF)
    ConsoleWrite('kw für nächste Woche ist: ' & _KW_SWITCH(1)&@LF)
    ConsoleWrite('Fehler: ' &@error&@LF)

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

    Func _KW_SWITCH($kw)
    ;~ ConsoleWrite('Wert $kw= ' & $kw & @LF)
    Switch $kw
    Case $kw = 0 ;aktuelle Woche
    $ret = _WeekNumberISO()
    Case $kw = 1 ;nächste Woche
    $s_string =StringSplit(_DateAdd('d', 7, _NowCalcDate()), '/')
    $ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
    Case $kw = 2 ;letzte Woche
    $s_string =StringSplit(_DateAdd('d', - 7, _NowCalcDate()), '/')
    $ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
    Case Else
    MsgBox(16,'','Es wurde kein gültiger Parameter übergeben.')
    EndSwitch
    Return $ret
    EndFunc

    [/autoit]

    MfG Jescho

    Jeder hat mal klein angefangen - aber nicht jeder kommt groß raus!

    Einmal editiert, zuletzt von Jescho (5. Januar 2012 um 15:21)

  • Du verwendest Swtich falsch. So gehts:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

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

    ConsoleWrite('kw ' & _WeekNumberISO() & @LF)

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

    ConsoleWrite('kw für letzte Woche ist: ' & _KW_SWITCH(2)&@LF)
    ConsoleWrite('kw für diese Woche ist: ' & _KW_SWITCH(0)&@LF)
    ConsoleWrite('kw für nächste Woche ist: ' & _KW_SWITCH(1)&@LF)
    ConsoleWrite('Fehler: ' &@error&@LF)

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

    Func _KW_SWITCH($kw)
    ;~ ConsoleWrite('Wert $kw= ' & $kw & @LF)
    Switch $kw
    Case 0 ;aktuelle Woche
    $ret = _WeekNumberISO()
    Case 1 ;nächste Woche
    $s_string =StringSplit(_DateAdd('d', 7, _NowCalcDate()), '/')
    $ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
    Case 2 ;letzte Woche
    $s_string =StringSplit(_DateAdd('d', - 7, _NowCalcDate()), '/')
    $ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
    Case Else
    MsgBox(16,'','Es wurde kein gültiger Parameter übergeben.')
    EndSwitch
    Return $ret
    EndFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.