找回密码
 加入
搜索
查看: 4307|回复: 11

[AU3基础] 输入错误重新输入(已解决)

  [复制链接]
发表于 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[1])
MsgBox(0, "", $array[2])
发表于 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[1])
MsgBox(0, "", $array[2])


发表于 2013-1-15 10:30:37 | 显示全部楼层
随便瞎写了一个,将就用吧
还可以对$value正则获取,的数量,如果数量为1那就说明是正确的,否则就不是
数字判断:对$value 进行, 替换成空,然后再 StringIsDigit判断
只有上面的两个条件都满足了才退出循环
 楼主| 发表于 2013-1-15 11:00:45 | 显示全部楼层
先谢过,另外想请问 Until UBound($array) = 3 的UBound实际用途
我看了英文说明,跑范例,但实际上并不是很了解其用处为何?
发表于 2013-1-15 11:06:48 | 显示全部楼层
回复 4# CCM

首先先说明下是要实时检测还是要最后检测,楼上的方法似乎只适用最后检测
 楼主| 发表于 2013-1-15 11:13:56 | 显示全部楼层
USER输入时就要检测,得到的数值要套入到Mouseclick内做XY点击使用。
发表于 2013-1-15 11:28:08 | 显示全部楼层
回复 6# CCM


    你没有听懂蛋大的意思,点了"确定"再判断的就是后检测,输入的过程中判断就是实时的~
发表于 2013-1-15 11:31:46 | 显示全部楼层
本帖最后由 annybaby 于 2013-1-15 11:42 编辑

回复 1# CCM


   
这句
 $array = StringSplit($value, ",")
 感觉使用StringSplit来判断不是个好主意(最起码,StringInStr也比它稍微好一点,至少更易理解^_^),如果你一定要用它来判断字符串中有逗号,应该是要判断$array[0]是否大于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[1])
MsgBox(0, "", $array[2])

;我认为代码短一点的:
Do
        $value = InputBox("輸入座標", "請輸入座標 (以逗號分隔): ")
        If @error Then Exit
Until StringRegExp($value,'\d+,\d+',0)
$array = StringRegExp($value,'\d+',3)
MsgBox(0, "", $array[0]&@LF&$array[1])
发表于 2013-1-15 11:37:56 | 显示全部楼层
回复 4# CCM

你前面使用了stringsplit来拆分输入的字符串,它总是返回一个数组,默认第一个元素($array[0])保存拆分后子字符串的数量,其余元素($array[1],$array[2] ,等等)则保存着拆分后的每个字符串. 如果使用了标志=2,则数量不会返回到第一个元素.
若在要进行分割的字符串中未发现分隔符则将 @error 设置为1,子字符串数量($array[0])设置为1,并且函数将返回整个字符串到第二个元素($array[1]).
所以
UBound($array) = 3
就是当数组维度为3时结束循环,此时,第一个元素是拆分后的数量,第二,三个元素分别是X,Y坐标
 楼主| 发表于 2013-1-15 11:52:44 | 显示全部楼层
再次感谢各位大侠帮忙,输入时是实时检测没错。

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

本人还是很菜,努力学习AU3中,希望以后各位大侠多多指教,谢谢。
发表于 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里面放的是,前后的内容。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-22 11:21 , Processed in 0.091114 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表