|
发表于 2009-12-23 16:12:05
|
显示全部楼层
此楼给不会正则的朋友看,这里是一个比较通用的方法.
本帖最后由 sanmoking 于 2009-12-23 16:14 编辑
我自己写了个func ,我平时不怎么会用正则,所以下面这个func能用到大部分文字提取的应用中,虽然楼主的问题解决了,但是后来的新人并没有一个通用的方法,下面的代码解决楼主的问题:$file=FileOpen("111.txt",0);打开下载的文件
If $file <> -1 Then $html = FileRead($file);读取文件源码
FileClose($file);关闭打开的文件
$aaa = ""
for $ti = 1 to amount($html,'<DISPLAYNAME>');查询有多少个条目
$ok=StringInStr($html,'<DISPLAYNAME>',0,$ti);得到第几条数据开始的位置
$aa = ies($html,"<DISPLAYNAME>","</DISPLAYNAME>",$ok);获取当前标题
$aaa = $aaa & $aa &@CRLF;每次循环后把结果附加到之前结果的后边...
next
MsgBox(0,"结果","条目如下:"&@CRLF&"------------------------------"&@CRLF&$aaa) ;显示结果
;~ 下面是几个简单的func,很有用的哦,你也可以写一些其他比如提取数字,删除<>之间字符,删除空白等等自定义func。
func ies($data,$a,$b,$s = 1,$c = 1);查找$a$b之间的文字,$a = 前面的关键词,$b=后边的关键词,$s = 从哪里开始查询 ,默认从$data最开始,$c = 查询第几个,默认为1
$start = StringInStr ($data, $a,0,$c,$s)+StringLen ($a);查找$a的结束位置
$end = StringInStr ($data,$b,0,1,$start);从$a的结束位置开始查找$b的位置
$amount = $end - $start;获得中间部分字符的数量
$txt=StringMid ($data, $start, $amount);得到中间部分的字符
Return $txt ;返回结果
EndFunc
func amount($data,$txt);返回$data一共有多少个$txt,没有考虑最大字节数..貌似会有限制...
$am = 0
while 1
$ok=StringInStr ($data,$txt,0,$am + 1)
If $ok > 0 Then
$am = $am + 1
Else
ExitLoop
EndIf
wend
Return $am
EndFunc
另外此func 解决了很多这样的问题,给个[传送门] |
|