CCM 发表于 2013-1-15 09:41:59

输入错误重新输入(已解决)

本帖最后由 CCM 于 2013-1-15 11:08 编辑

请问各位大侠
我想达成,USER的输入如果不是以逗号分隔便报错,再让USER重新输入一次
我找到的范例虽然可达成我想要的目的,不过在StringIsDigit($value)的判断上
该怎么把逗号也纳进去?请各位大侠帮个忙,出手相助,感激不尽。


Do
        $value = InputBox("輸入座標", "請輸入座標 (以逗號分隔): ")
        If @error Then Exit
        $array = StringSplit($value, ",")
        If Not StringIsDigit($value) Then MsgBox(0, "輸入錯誤", "請以逗號分隔輸入", 1)
Until StringIsDigit($value)

MsgBox(0, "", $array)
MsgBox(0, "", $array)

骗子 发表于 2013-1-15 10:26:43


Do
        $value = InputBox("輸入座標", "請輸入座標 (以逗號分隔): ")
        If @error Then Exit
        $array = StringSplit($value, ",")
        If @error = 1 Then
                MsgBox(0, "輸入錯誤", "請以逗號分隔輸入", 1)
        Else
                For $i = 1 To UBound($array) - 1
                        If Not StringIsDigit($array[$i]) Then MsgBox(0, "輸入錯誤", "請以逗號分隔輸入", 1)
                Next
        EndIf
Until UBound($array) = 3

MsgBox(0, "", $array)
MsgBox(0, "", $array)


骗子 发表于 2013-1-15 10:30:37

随便瞎写了一个,将就用吧
还可以对$value正则获取,的数量,如果数量为1那就说明是正确的,否则就不是
数字判断:对$value 进行, 替换成空,然后再 StringIsDigit判断
只有上面的两个条件都满足了才退出循环

CCM 发表于 2013-1-15 11:00:45

先谢过,另外想请问 Until UBound($array) = 3 的UBound实际用途
我看了英文说明,跑范例,但实际上并不是很了解其用处为何?

netegg 发表于 2013-1-15 11:06:48

回复 4# CCM

首先先说明下是要实时检测还是要最后检测,楼上的方法似乎只适用最后检测

CCM 发表于 2013-1-15 11:13:56

USER输入时就要检测,得到的数值要套入到Mouseclick内做XY点击使用。

annybaby 发表于 2013-1-15 11:28:08

回复 6# CCM


    你没有听懂蛋大的意思,点了"确定"再判断的就是后检测,输入的过程中判断就是实时的~

annybaby 发表于 2013-1-15 11:31:46

本帖最后由 annybaby 于 2013-1-15 11:42 编辑

回复 1# CCM


    这句
$array = StringSplit($value, ",")
感觉使用StringSplit来判断不是个好主意(最起码,StringInStr也比它稍微好一点,至少更易理解^_^),如果你一定要用它来判断字符串中有逗号,应该是要判断$array是否大于1
其次,就算是包含了逗号,也不见得输入就是合法的
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;下面的代码也不是很严谨,如果有必要,你可以再判断数组元素的内容是否合法,下面是给一个示例,可以照此优化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;你原版改的
Do
      $value = InputBox("輸入座標", "請輸入座標 (以逗號分隔): ")
      If @error Then Exit
      $array = StringSplit($value, ",")
      If Not StringRegExp($value,'\d+,\d+',0) Then MsgBox(0, "輸入錯誤", "請以逗號分隔輸入", 1)
Until StringRegExp($value,'\d+,\d+',0)

MsgBox(0, "", $array)
MsgBox(0, "", $array)

;我认为代码短一点的:
Do
      $value = InputBox("輸入座標", "請輸入座標 (以逗號分隔): ")
      If @error Then Exit
Until StringRegExp($value,'\d+,\d+',0)
$array = StringRegExp($value,'\d+',3)
MsgBox(0, "", $array&@LF&$array)

annybaby 发表于 2013-1-15 11:37:56

回复 4# CCM

你前面使用了stringsplit来拆分输入的字符串,它总是返回一个数组,默认第一个元素($array)保存拆分后子字符串的数量,其余元素($array,$array ,等等)则保存着拆分后的每个字符串. 如果使用了标志=2,则数量不会返回到第一个元素.
若在要进行分割的字符串中未发现分隔符则将 @error 设置为1,子字符串数量($array)设置为1,并且函数将返回整个字符串到第二个元素($array).
所以
UBound($array) = 3
就是当数组维度为3时结束循环,此时,第一个元素是拆分后的数量,第二,三个元素分别是X,Y坐标

CCM 发表于 2013-1-15 11:52:44

再次感谢各位大侠帮忙,输入时是实时检测没错。

另外用stringsplit是因为我只用過StringRegExp,
不过StringRegExp抓不出我要的结果,也改不出來...
所以GOOGLE找得一个用stringsplit的范例,自己再改來使用

本人还是很菜,努力学习AU3中,希望以后各位大侠多多指教,谢谢。

annybaby 发表于 2013-1-15 11:56:30

回复 10# CCM


膜拜下舍近求远的Google大神`~

骗子 发表于 2013-1-15 15:45:48

回复 4# CCM

$array = StringSplit($value, ",")如果字符串中只有1个,的话出来的UBound($array) 必然是 3,其中0里放的是拆分成几段,1,2里面放的是,前后的内容。
页: [1]
查看完整版本: 输入错误重新输入(已解决)