找回密码
 加入
搜索
查看: 4603|回复: 17

[AU3基础] 不好意思,再问一个基础小问题[已解决]

  [复制链接]
发表于 2016-10-23 22:27:21 | 显示全部楼层 |阅读模式
本帖最后由 cashiba 于 2016-10-26 15:21 编辑

以下这段代码为啥结果会不对呢?
local $NumStr = "4,7,10"
local $bb = 1
For $k = $bb To (19 + $bb) Step 1
If stringinstr($NumStr,$k)=0 then
   ConsoleWrite("++" & $k & @CRLF)
Else
   ConsoleWrite("--" & $k & @CRLF)
endif
Next
运行结果如下:


这个数字1明明不在字符串"4,7,10"中,为啥运行结果显示1在里面呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-10-23 22:42:06 | 显示全部楼层
看了好久才知道楼主想说啥,你这个1,因为 $NumStr = "4,7,10"是字符串,“10”里面包含了1,所以出现这样的结果。
 楼主| 发表于 2016-10-23 23:08:52 | 显示全部楼层
看了好久才知道楼主想说啥,你这个1,因为 $NumStr = "4,7,10"是字符串,“10”里面包含了1,所以出现这样的 ...
chamlien 发表于 2016-10-23 22:42

哦,一说就明白了,看样子又是思维定势了....
还是旁观者清阿
我是把10看成一个数了,或者一个字符了,里面的分隔符也在暗示这个.....
没脸见人了......
 楼主| 发表于 2016-10-23 23:12:08 | 显示全部楼层
本帖最后由 cashiba 于 2016-10-23 23:14 编辑

我是想在一个给定的数字序列里,比喻上面的For 1 to 20
摘除掉另一个数字序列,比喻上面的(4,7,10)
因为对AU3的数组不习惯,不会从一个数组过滤掉另一个数组产生一个新的符合需要的数组
所以想了这么一个笨办法
所以潜意识里还是当成数字集合来处理了
 楼主| 发表于 2016-10-23 23:17:45 | 显示全部楼层
本帖最后由 cashiba 于 2016-10-23 23:20 编辑

假如 for 6 to 27  step 1 生成数组arr
要过滤掉其中的数组brr=array{4,7,10,16,29}
要怎么写呢?
估计论坛里会有类似这种情况的自定义函数,我先搜索看
有知道的老师,请指点一下,先谢了......
发表于 2016-10-24 00:24:19 | 显示全部楼层
本帖最后由 风行者 于 2016-10-24 00:49 编辑

1. 最简单的方法是用循环检测,死电脑不死脑细胞
2. 如果数组很长可以使用正则去重

#include <Array.au3>
Local $arr1 = [4,7,10,16,29]
Local $arr2[1]=[6]
For $i = 7 To 27
        _ArrayAdd($arr2,$i)
Next

;前面只是定义数组,下面是去重
Local $str = _ArrayToString($arr2,",")  ;合并为字符串
;循环替换数组元素
For $j = 0 To UBound($arr1) - 1      
        $str = StringReplace($str,","&$arr1[$j],"")
Next

;字符串生成新数组
$arr3 = StringSplit($str,",",2)
_ArrayDisplay($arr3)
发表于 2016-10-24 08:48:46 | 显示全部楼层
stringinstr  是处理string的
可以把 local $NumStr = "4,7,10" 重新定义一下,
比如 local $NumStr = ",4,7,10,"
然后可以处理string (“,x,”)
 楼主| 发表于 2016-10-24 19:43:25 | 显示全部楼层
本帖最后由 cashiba 于 2016-10-24 19:50 编辑
1. 最简单的方法是用循环检测,死电脑不死脑细胞
2. 如果数组很长可以使用正则去重
风行者 发表于 2016-10-24 00:24

感谢风神老师!
你这段代码里用到不少自定义函数,惭愧,刚接触,都不怎么熟悉,结果是对的,不过感觉稍微烦杂了点,作为练习AU3数组自定义函数的范烈倒是很不错

是的,循环检测的办法虽然笨,但是可靠性强,现在的电脑性能不是问题。
但是因为对AU3数组不熟,我写出来的代码总觉得结果不那么靠谱。

风神老师有空看看我下面这样写的代码:
去掉注释的部分结果是对的,加上注释的那部分就有问题,大概逻辑错误大大的....
$cc="4,7,10,16,29"
For $k = 6 To 27 Step 1
    If compare($k, $cc) = 0 Then
       ConsoleWrite("++" & $k & @CRLF)
    else
       ConsoleWrite("--" & $k & @CRLF)
    endif
Next

Func compare($x,$str)
local $arr = stringsplit($str, ",")
For $a In $arr
      If $a = $x  Then
         return 1
;~     ExitLoop
;~  Else
;~     return 0        
      EndIf
Next
EndFunc
 楼主| 发表于 2016-10-24 19:49:14 | 显示全部楼层
stringinstr  是处理string的
可以把 local $NumStr = "4,7,10" 重新定义一下,
比如 local $NumStr = ", ...
1361739590 发表于 2016-10-24 08:48

不带分隔符我就有点头晕,加上分隔符一起比较,我要晕菜了
发表于 2016-10-24 20:04:27 | 显示全部楼层
回复 8# cashiba
加上注释部分后,你的那个循环实际上只会运行一次,   相等返回1,不等则返回0 .
去掉注释部分后, 如果有相等,函数会返回1 ,如果没有则继续循环,直至结束循环后,函数无返回值时,默认返回0.
还有, return 就跳出函数了, 后面的 Exitloop 就不会运行了.

下面代码,感觉逻辑性强一点.
Func compare($x, $str)
        Local $iRe = 0
        Local $arr = StringSplit($str, ",")
        For $a In $arr
                If $a = $x Then
                        $iRe = 1
                        ExitLoop
                EndIf
        Next
        Return $iRe
EndFunc
 楼主| 发表于 2016-10-24 20:04:53 | 显示全部楼层
另外,这个
Local $arr2[1]=[6]
没看明白表示什么意思呢?
发表于 2016-10-24 20:10:55 | 显示全部楼层
回复 11# cashiba
Local $arr2[1]=[6]
定义一个只有一个元素([1])的数组,其名为$arr2 .引用其元素时, 只有 $arr2[0]( = 6 ) , 此时不存在 $arr2[1] 这个元素.
L
ocal $arr[2]=['a',6]
定义一个只有2个元素([2])的数组,其名为$arr .引用其元素时, 只有 $arr[0]( a ) 和 $arr[1] (6) 共2个元素.
 楼主| 发表于 2016-10-24 20:37:47 | 显示全部楼层
回复  cashiba
加上注释部分后,你的那个循环实际上只会运行一次,   相等返回1,不等则返回0 .
去掉注释部 ...
Alam 发表于 2016-10-24 20:04

好像在哪个实例中看到这样的正确写法,确实逻辑性、条例清晰阿。一直把return当做返回函数值的用法,跳出函数倒是忽略了,难怪出问题呢。这些都是基础和细节,一般的帮助文档大多是一句带过或不当是问题,所以容易被忽略。Alam老师讲解很清晰到位,受益匪浅哇,非常感谢!
 楼主| 发表于 2016-10-24 20:42:09 | 显示全部楼层
回复  cashiba
Local $arr2[1]=[6]
定义一个只有一个元素([1])的数组,其名为$arr2 .引用其元素时, 只有  ...
Alam 发表于 2016-10-24 20:10

数组简单,写得也简短,还有那个左右都是中括号,看得晕菜哇,惭愧惭愧.....
大概还没习惯用中括号[]表示的数组吧,以前学的数组多是书写小括号()的
 楼主| 发表于 2016-10-24 23:06:32 | 显示全部楼层
代码总是运行有错,刚刚才发现,
For $a In $arr
中这个$a是不是还包括$arr[0][0] 【数组元素个数】呢,怪不得总是不对....

AU3的数组真是不习惯阿
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-20 05:03 , Processed in 0.083237 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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