输入错误重新输入(已解决)
本帖最后由 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)
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)
随便瞎写了一个,将就用吧
还可以对$value正则获取,的数量,如果数量为1那就说明是正确的,否则就不是
数字判断:对$value 进行, 替换成空,然后再 StringIsDigit判断
只有上面的两个条件都满足了才退出循环 先谢过,另外想请问 Until UBound($array) = 3 的UBound实际用途
我看了英文说明,跑范例,但实际上并不是很了解其用处为何? 回复 4# CCM
首先先说明下是要实时检测还是要最后检测,楼上的方法似乎只适用最后检测 USER输入时就要检测,得到的数值要套入到Mouseclick内做XY点击使用。 回复 6# CCM
你没有听懂蛋大的意思,点了"确定"再判断的就是后检测,输入的过程中判断就是实时的~ 本帖最后由 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) 回复 4# CCM
你前面使用了stringsplit来拆分输入的字符串,它总是返回一个数组,默认第一个元素($array)保存拆分后子字符串的数量,其余元素($array,$array ,等等)则保存着拆分后的每个字符串. 如果使用了标志=2,则数量不会返回到第一个元素.
若在要进行分割的字符串中未发现分隔符则将 @error 设置为1,子字符串数量($array)设置为1,并且函数将返回整个字符串到第二个元素($array).
所以
UBound($array) = 3
就是当数组维度为3时结束循环,此时,第一个元素是拆分后的数量,第二,三个元素分别是X,Y坐标 再次感谢各位大侠帮忙,输入时是实时检测没错。
另外用stringsplit是因为我只用過StringRegExp,
不过StringRegExp抓不出我要的结果,也改不出來...
所以GOOGLE找得一个用stringsplit的范例,自己再改來使用
本人还是很菜,努力学习AU3中,希望以后各位大侠多多指教,谢谢。 回复 10# CCM
膜拜下舍近求远的Google大神`~ 回复 4# CCM
$array = StringSplit($value, ",")如果字符串中只有1个,的话出来的UBound($array) 必然是 3,其中0里放的是拆分成几段,1,2里面放的是,前后的内容。
页:
[1]