cashiba 发表于 2016-9-29 12:34:01

Au3的Switch与Select等。[已解决]

本帖最后由 cashiba 于 2017-3-18 09:41 编辑

#include <MsgBoxConstants.au3>

Local $sMsg = ""

Switch @HOUR
    Case 6 To 11
      $sMsg = "早上好"
    Case 12 To 17
      $sMsg = "下午好"
    Case 18 To 21
      $sMsg = "晚上好"
    Case Else
      $sMsg = "你还在干什么?"
EndSwitch
MsgBox($MB_SYSTEMMODAL, "", $sMsg)
一个表达式,用Switch
#include <MsgBoxConstants.au3>
Example()
Func Example()
    Local $iValue = 0
    Local $sBlank = "测试"

    Select
      Case $iValue = 1
            MsgBox($MB_SYSTEMMODAL, "", "第一个表达式为 True.")
      Case $sBlank = "测试"
            MsgBox($MB_SYSTEMMODAL, "", "第二个表达式为 True")
      Case Else ; 如果没有匹配, 则执行以下代码.
            MsgBox($MB_SYSTEMMODAL, "", "前面的表达式都不为 True.")
    EndSelect
EndFunc多个表达式,用Select。

以前接触的其它语言的,只有select....case....循环或Choose...case....循环。Au3的这种循环复杂些。

另外,do循环,AU3只有一种形式:Do....until
其它语言呢,有
do...loop until
do until...loop
do while....loop
do.....loop while

学多了感觉有点麻爪.{:face (203):}

heroxianf 发表于 2016-9-29 13:25:34

Do....until   循环一直都没用到过。其他都是看情况使用,select ....endselect 用的多

heroxianf 发表于 2016-9-29 13:28:59

本帖最后由 heroxianf 于 2016-9-29 13:31 编辑

我一直等着这个东西完成了,再来请教大家给我优化一下,总感觉逻辑厉害的几行就可以搞定{:face (197):}


For $Row = 0 To UBound($ProdArray, 2) - 2
        $oConditions = UBound(StringRegExp($ProdArray[$Row + 1], $oExp, 3))
        $oConditions = UBound(StringRegExp($ProdArray[$Row + 1], $oExp, 3))
        $oConditions = UBound(StringRegExp($ProdArray[$Row + 1], $oExp, 3))

        Select

                Case $oConditions > 0 and $oConditions > 0 and $oConditions > 0

                        _Excel_RangeWrite($oWorkbook, Default, '业务', 'E' & $Row + 2)

                Case $oConditions > 0 and $oConditions > 0 and $oConditions = 0

                        _Excel_RangeWrite($oWorkbook, Default, '业务', 'E' & $Row + 2)

                Case $oConditions > 0 and $oConditions = 0 and $oConditions > 0

                        _Excel_RangeWrite($oWorkbook, Default, '业务', 'E' & $Row + 2)

                Case $oConditions > 0 and $oConditions = 0 and $oConditions = 0

                        _Excel_RangeWrite($oWorkbook, Default, '业务', 'E' & $Row + 2)

                Case $oConditions = 0 and $oConditions > 0 and $oConditions > 0

                        _Excel_RangeWrite($oWorkbook, Default, '业务', 'E' & $Row + 2)

                Case $oConditions = 0 and $oConditions > 0 and $oConditions = 0

                        _Excel_RangeWrite($oWorkbook, Default, '业务', 'E' & $Row + 2)

                Case $oConditions = 0 and $oConditions = 0 and $oConditions > 0

                        _Excel_RangeWrite($oWorkbook, Default, '1', 'E' & $Row + 2)

                Case $oConditions = 0 and $oConditions = 0 and $oConditions = 0

                        _Excel_RangeWrite($oWorkbook, Default, 'Other', 'E' & $Row + 2)

        EndSelect
        Sleep(10)
;        MsgBox(0, $Row + 1, $oConditions & '-' & $oConditions & '-' & $oConditions & '-' & $ProdArray[$Row + 1], 1)
Next

cfanpc 发表于 2016-10-4 09:17:57

学习了谢谢分享

1361739590 发表于 2016-10-6 09:29:39

回复 3# heroxianf


    问一下UBound 这个返回的应该没有负数吧,好像只有三种情况吧0 0 0;0 0 >0;other

heroxianf 发表于 2016-10-6 11:17:04

回复 5# 1361739590


    这个问题还没遇到过!{:face (396):}

1361739590 发表于 2016-10-6 11:28:14

回复 6# heroxianf


    三种情况为什么写那么多case

heroxianf 发表于 2016-10-6 14:47:44

回复 7# 1361739590


    我是按照主谓宾来判断的。

1361739590 发表于 2016-10-6 15:45:37

回复 8# heroxianf


    写成3个不是好看一点么?

heroxianf 发表于 2016-10-6 20:06:23

回复 9# 1361739590


    写三个貌似不能满足要求,到时候发整个代码还请指点。

1361739590 发表于 2016-10-7 07:34:31

回复 10# heroxianf


    按照你上面写的可以分3个,其他情况就具体看了。

cihron 发表于 2016-10-13 02:08:49

这两个各有千秋,使用时要看实际情况
switch 重点是对指定的值进行判断
select 重点是对表达式进行判断
循环的主要是 先循环还是先判断

cashiba 发表于 2016-10-14 16:01:04

这两个各有千秋,使用时要看实际情况
switch 重点是对指定的值进行判断
select 重点是对表达式进行判断
...
cihron 发表于 2016-10-13 02:08 http://www.autoitx.com/images/common/back.gif
AU3的语法主要是参照哪种语言来的呢?感觉不少编程语言,比喻VB等,好像也就只有一种形式就够了

cihron 发表于 2016-10-17 02:52:07

回复 13# cashiba


    何必纠结呢,选择一种自己最喜欢的式,其它的可以忽略。重要的是算法,语言只不过是工具而已,无所谓,呵呵!{:face (427):}

cihron 发表于 2016-10-17 02:54:25

回复 14# cihron


    有句关于语言的经典的话,送给你,慢慢就理解了

    “计算机语言如同祭司手中的神杖,神杖换了,祭司还是祭司,世人还是会把头叩得山响。祭司掌握了与神交流的方法,而世人只看见了神杖。”
页: [1] 2
查看完整版本: Au3的Switch与Select等。[已解决]