[已解决]搜索数组中的值搜不到,
本帖最后由 加速度 于 2012-12-30 14:42 编辑没有己解决分类,是这样把标题改一下吗?$ip="192.168.1.1"
_FileReadToArray("D:\iplog.txt",$iplog)
_ArrayDisplay($iplog)
_ArraySort($iplog)
_ArrayDisplay($iplog)
$ccc=_ArrayBinarySearch($iplog,$ip)如果iplog.txt里的内容有重复铁定搜不到,没重复了也可能搜到也可能搜不到,不知道问题在哪,字母都认不全的新手啊,别拍1
2
3
4
5
6
7
192.168.1.1
iplog.txt如果是这样,返回“-1”@error是06561
3516
192.168.1.1
4513
123
132
如果是这样,刚才试的时候还搜不到,发帖的时候试了试又搜到了,反正不管搜不搜的到@error始终是0 可能是_FileReadToArray有bug
建议用fileread读取整个文件、用stringsplit按行拆分数组 回复 1# 加速度
这个问题描述起来非常麻烦,我也并不清楚你为什么一定要使用二进制搜索,如果不介意,建议直接使用
_ArraySearch(),所有问题都O了~
另外,建议发代码时要发全,不要省去包含文件,变量定义等,因为有些问题就出在那里~~ 回复 3# annybaby
好的,我试试_arraySearch
其实,,,我也不明白为什么要用_ArrayBinarySearch
看帮助文档里说这个好像好用些,,,, 本帖最后由 netegg 于 2012-12-30 14:12 编辑
_arraybinarysearch不能自适应不同的数据类型
是快些,首先binarysearch不考虑数据类型,其次在搜索时使用的是插值,但是局限性就自然出来了 回复 2# veket_linux
谢谢,,我都试一下,,,, 回复 4# 加速度
_ArrayBinarySearch使用二分法查找(折半查找),速度会比_arraySearch快,但前提是数据是已经排过序的,而算上排序本身的时间,那速度上优势就不明显了,而且还必要是数据允许排序 本帖最后由 netegg 于 2012-12-30 14:40 编辑
#include <array.au3>
Local $a =
MsgBox(0,0,_ArrayBinarySearch($a, '192.168.1.1'))
Local $a = ['1', '2', '3', '4', '192.168.1.1', '5', '6', '7', '8', '9']
MsgBox(0,0,_ArrayBinarySearch($a,'192.168.1.1'))
_ArraySort($a)
MsgBox(0,0,_ArrayBinarySearch($a,'192.168.1.1'))
这样能看出个大概来 本帖最后由 netegg 于 2012-12-30 14:33 编辑
回复 7# annybaby
没说到点上,看看函数原型,就是少了步变量类型的判断和转换(默认是数值),就像第二个例子,没排序,一样可以搜索 用Fileread 读取,再拆分不行,,不知道为什么,返回-1
用_ArraySearch确实没事,,,但@error一直都是0,暂时没发现啥别的问题,先用这招研究了
试的时候不管找没找到@error好像一直是0, 回复 10# 加速度
fileread怎么拆的?行尾的cr/lf怎么处理的 回复 11# netegg $txt=FileRead("D:\iplog.txt")
$iplog=StringSplit($txt,Chr(13))用这个来着,
又用@CRLF试了下找到了,但是每条后面都多了一个空元素(应该是叫元素哈),
单用@CR和@LF没空行,返回结果和Chr(13)一样-1 回复 10# 加速度
其实根本不是读入的问题,也不是fileread不行,用stringsplit将读入的文件以@CRLF整体拆分(当然,你的文件是windows使用的文本格式)就可以
返回-1,是正常的,因为的确是"没有找到"!!
@error当然是0,因为的确没有错误~~
我在第一个帖子已经说了,描述非常麻烦,所以没有说
具体情况你看一下array.au3里面的自定义函数代码就知道了 本帖最后由 netegg 于 2012-12-30 15:03 编辑
回复 12# 加速度
这个处理起来比较恶心,crlf本身就不是一个字符而是两个字符(acsii中的两个字),换行和回车是不同的,不是很方便处理,建议对文件进行数组操作尽量少用,拆不好就出毛病
拆的话,用正则可能好些,应该可以排除单独的cr/lf和crlf 回复 14# netegg
直接创建的都是win默认的@CRLF啊,拆分时看作一个整体就可以
页:
[1]
2