找回密码
 加入
搜索
查看: 3418|回复: 5

[效率算法] 请教如何过滤数组元素?[已解决]

  [复制链接]
发表于 2011-12-26 19:05:29 | 显示全部楼层 |阅读模式
本帖最后由 tsys 于 2011-12-26 21:04 编辑

http://top.baidu.com/这个链接举例,运行下列代码后,数组内部频繁出现“贴吧”之类的元素,希望的结果是如果“数组元素内”出现“贴”字符,则删除该数组或不加入数组,
小弟尝试多次,屡试屡败,不得不求教论坛各位大大,希望能另写个function不在下列代码中做手脚
#include<array.au3>
#include<ie.au3>

Local $IEObj = _IECreate("http://top.baidu.com/",0,0,1,0)
        Local $oLinks = _IELinkGetCollection($IEObj),$temp ,$Array[1]
        Local $i = 0
                        For $oLink in $oLinks                                        ;查找符合项目
                                        $i+=1
                                        ReDim $Array[$i]
                                        $Array[$i-1] = $oLink.innerText
                        Next
        _IEQuit($IEObj)        
        _ArrayDisplay($Array,"处理前的数组")        
发表于 2011-12-26 19:30:32 | 显示全部楼层
本帖最后由 user3000 于 2011-12-26 19:33 编辑

#include<array.au3>
#include<ie.au3>

Local $IEObj = _IECreate("http://top.baidu.com/", 0, 0, 1, 0)
Local $oLinks = _IELinkGetCollection($IEObj)
Local $temp, $Array[1]
For $oLink In $oLinks ;查找符合项目
        If $oLink.innerText <> '贴吧' Or $oLink.innerText <> 0 Then _ArrayAdd($Array, $oLink.innerText)  ; 打成‘帖吧’了
Next
;_IEQuit($IEObj)
$Array[0] = UBound($Array) - 1
_ArrayDisplay($Array, "结果")

你的代码有误。。。
我注释的这行运行出错, 未寻找原因。

评分

参与人数 2金钱 +50 贡献 +5 收起 理由
tsys + 30 + 5
afan + 20

查看全部评分

 楼主| 发表于 2011-12-26 19:42:51 | 显示全部楼层
回复 2# user3000


    不会吧,我换了多个电脑测试都正常的

user3000 可能没理解我说的意思,代码中要检测数组元素中是否含有“贴”字符,难免需要使用stringinstr函数,也麻烦user3000 别在上面的例子中插入代码,因为只是个获取数组的例子,希望写成func,如果需要过滤多个文字或者从ini文件读取自定义文字,那么显然很麻烦了
发表于 2011-12-26 20:28:32 | 显示全部楼层
可以在数组赋值之前用StringInStr()识别下。
也可以将数组转为字符串处理后再重新生成数组
具体看需要。
 楼主| 发表于 2011-12-26 21:01:28 | 显示全部楼层
回复 4# afan


    弄了很久一直都是数组超界,对于我这个菜鸟,以下是艰难的调试过程:
#include<array.au3>
#include<ie.au3>
        Local $temp[15] = [11,18,89,87,64,54,98,66,77,92,21,43,44,48,98]
        Local $n,$j=0
        _ArrayDisplay($temp)
        For $n = 0 To UBound($temp)-1
                MsgBox(0,"","$n变量值为:"&$n&" $j变量为:"&$j)
                If StringInStr($temp[$n-$j],"8") Then
                                _ArrayDelete($temp,$n-$j)
                                _ArrayDisplay($temp)
                                $j+=1
                EndIf
        Next
                        _ArrayDisplay($temp,"处理后的数组") 
好在终于将这个问题解决了,也才明白,for $i =0 to $a   $a的值定义后就无法改变了
发表于 2011-12-27 01:01:49 | 显示全部楼层
学习了!学习au3脚本都会遇到!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-21 01:15 , Processed in 0.082110 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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