请教一个切割文本内容的问题
本帖最后由 yigao 于 2009-10-8 14:37 编辑还是这个页面
http://ks.cn.yahoo.com/dir/vote_ans.html
AU3好像没有像AHK那样可以直接判断字符串在文本中的位置的函数。在上面页面的源文件中包含“精彩知识问答”后面的内容基本上是无用的,想先切割无用字符串后面的内容然后再进行后续操作。我现在的办法是先用filereadtoarray将文本读入,再每个测长累加找到“精彩知识问答”的位置,最后作切割。问题一是这样判断的位置不太准确,切割出来总会多一些,二是效率比较低。代码如下:Dim $aRecords
InetGet ("http://ks.cn.yahoo.com/dir/vote_ans.html","d:\My AutoIt\temp1.txt")
$file = FileRead("d:\My AutoIt\temp1.txt")
$file = BinaryToString($file,4)
_FileCreate("d:\My AutoIt\temp.txt")
FileWrite("d:\My AutoIt\temp.txt",$file)
FileDelete("d:\My AutoIt\temp1.txt")
_FileReadToArray("d:\My AutoIt\temp.txt",$aRecords)
$StringLen=0
$StringLenAll=0
For $x = 1 to $aRecords
$StringLen=StringLen($aRecords[$x])
$StringLenAll=$StringLenAll+$StringLen
if StringRegExp($aRecords[$x],"精彩知识问答") Then
Msgbox(0,'Record:' & $x, $aRecords[$x])
$file1=StringTrimLeft($file,$StringLenAll)
msgbox(0,"",$file1)
EndIf
Next
FileDelete("d:\My AutoIt\temp.txt")
请教有无准确切割文本内容的方法?谢谢!
另外,数组的定义究竟应该怎样才正确。我曾经用Dim $aRecords,但似乎得到的不是数组。 不知道你到底要获取什么。。。例如? 就是要获取源文件中“精彩知识问答”之前的部分内容。AU3中没有判断子字符串在字符串中位置的函数,所以在切割字符串的时候需要判断子字符串的位置。我上述的代码判断的位置不准确。 "之前的部分内容"? 好多内容啊... 是有好多。所以才需要判断StringTrimLeft中的位置 StringSplit( "字符串", "分隔符", 1) 关键是源文件内容中没有什么明显分隔符。还在考虑中! 分隔符="精彩知识问答" 这样确实可以。暂时先这样了,不知道还有没有其余的思路。 其他思路 当然是用ie.au3来操作ie咯 本帖最后由 yigao 于 2009-10-8 15:43 编辑
还是有点问题。
如果这样切割,分隔符右面的部分应该是被删除的,如果想要分隔符右面的部分而删除左面的内容怎么办?
我看操作结果数组=1,数组=分隔符左面部分的内容,输出数组即显示超出错误,显然没有这个数组元素。 11# yigao
不必弄这么复杂吧?
当然也许你对这个文本还有另外的需求。
个人以为可以如下方法简单实现关键字分隔,仅供参考。
$RUrl="http://ks.cn.yahoo.com/dir/vote_ans.html"
$RFile="c:\temp1.txt"
$WFile="c:\temp.txt"
$SpKey="精彩知识问答"
InetGet ($RUrl,$RFile)
$file = BinaryToString(FileRead($RFile),4)
FileWrite($WFile,$file)
FileDelete($RFile)
$aRecords = StringSplit(FileRead($WFile),$SpKey,1)
If $aRecords = 1 Then
ConsoleWrite("未发现分隔关键字:"&$SpKey&";全部内容如下:"&@CRLF&$aRecords)
Else
ConsoleWrite("》》"&$SpKey&"之前的内容:"&@CRLF&$aRecords&@CRLF&@CRLF&"###############################################################")
ConsoleWrite("》》"&$SpKey&"之后的内容:"&@CRLF&$aRecords&@CRLF&@CRLF)
EndIf
FileDelete($WFile)
谢谢!
我运行了上面的代码,开始没有看到结果。$aRecords=2。当时是不知道文本写到哪里去了?后来我加了几句msgbox,看到结果了。目前还在思考ConsoleWrite是如何实现我要求的目的的。 我太杯具了翻到11楼 就去试验 写完了才发现 原来大K已经写好了
不过我怀疑楼主更想的是这样的用途
#include <ie.au3>
$oIE = _IECreate('http://ks.cn.yahoo.com/dir/vote_ans.html')
$oGood = _IEGetObjByName($oIE, 'cate_contrib', 1)
$sText = _IEPropertyGet($oGood, "innertext")
我太杯具了翻到11楼 就去试验 写完了才发现 原来大K已经写好了
不过我怀疑楼主更想的是这样的用途
#include
$oIE = _IECreate('http://ks.cn.yahoo.com/dir/vote_ans.html')
$oGood = _IEGetObjByName($ ...
sxd 发表于 2009-10-8 22:30 http://www.autoitx.com/images/common/back.gif
更悲剧的是 yigao 同学“还在思考ConsoleWrite是如何实现我要求的目的的”。
Sxd同学,请你站起来回答 yigao同学一下,ConsoleWrite是起什么作用的?
页:
[1]
2