au3一次读取1000行数据的问题,能不能提升一下速度(已解决)
本帖最后由 qq123123 于 2010-10-14 12:25 编辑au3一次读取记事本1000行数据的问题,能不能提升一下速度,
我有一个记事本,大概900M 左右,一次我要读取1000行的数据出来,
小弟不才,自己做了一个,但是运行速度太慢了,特别是读取到10多万行的时候,巨卡!
请求高手帮我改善一下!或者提示一下,我需要用什么方法能做得更好
$time = @HOUR & @MIN& @SEC
$sl = 1000 ;读取指定行的字符.
$xie = FileOpen("读取到的号.ini", 2);把帐号组合在一起
$i = 1
While $i <= $sl
$yeshu = FileOpen("行号.ini", 0)
$xinghao2 = FileReadLine($yeshu,1);读出行号
FileClose($yeshu)
$ye = $xinghao2 + 1
;~ ==========
$bokebiaoti = FileOpen("原始文本.txt", 0)
$shuju = FileReadLine($bokebiaoti,$xinghao2)
FileClose($bokebiaoti)
;~ ===========
$yeshu = FileOpen("行号.ini", 2)
FileWriteLine($yeshu, $ye)
FileClose($yeshu)
ToolTip( $shuju,0,200 )
;~ ===========
If $shuju = "" Then
MsgBox(16,"提示错误","要查找的帐号不足"&$sl&"个!请更换",5)
Exit
EndIf
FileWrite($xie, $shuju&@CRLF)
$i = $i + 1
WEnd
FileClose($xie)
;~ =============================================
$xie = FileOpen("读取帐号/读取到的号.ini",0);把帐号组合在一起
$hao = FileRead($xie,88800)
FileClose($xie)
ClipPut($hao);在剪切板中写入文本.
$time_2 = @HOUR & @MIN & @SEC
$ok = $time_2 - $time
TrayTip ( "账号成功提取", "一共运行了"&$ok&"秒:",5,1 )
Sleep(1000) 这个我知道有个udf,能一次读出来存成数组,每一行为一个数组元素
_FileReadToArray( #include <file.au3>
Dim $aRecords
If Not _FileReadToArray("数据.txt",$aRecords) Then
MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
Exit
EndIf
For $x = 1 to $aRecords
ToolTip( $x&"---"&$aRecords[$x],0,300 )
;~ Msgbox(0,'Record:' & $x, $aRecords[$x])
Next 900M 的记事本文档… 那还不得搞死~ MS也不限制下… 这么大的数据量应该用数据库来做,插入、更新、删除、导入导出快速方便。 使用StringSplit将文件拆分为N个字符串,然后再分别处理,我测试过从9万行的TXT文本中读取一些有用的数据仅2s-3s左右。此外,不建议实时写入,推荐将读取的数据写入一个变量中,使用“&=”,然后再一次写入一个文本。不过对于900M就不知道了呃! 先获取文件的总行数,然后拆分成10个(或者更多)相等的段,将每个段的行号存入一个数组内,文件读取的时候从第 n 个行号开始,到n+1个行号结束。 用定时器API创建多个线程操作试试。 定时器内部操作的数据处理过程可以用一个子函数来完成,所有定时器都调用该子函数,不同的是,子函数中的参数决定了文件读取开始行和结束行。
最后,各个定时器处理完的结果分别存入各自的全局变量,所有定时器执行完毕后将结果再重组输出。 这个也要用哦,我也要看看 看看先。。。。 900MB的txt文件太大了,程序要对txt文件进行操作,肯定要打开把数据全部读入内存,这样操作太慢,建议换其他的方式存放这900MB的数据 你是根据账号来读取文件内容的,可以按账号建个ini文件,
格式:账号=ZZZ
文件名=xXXX
然后找到哪个账号再去读取那个文件,这样会快点,
我的意思是把900MB的文件分拆成一个个文件。不知道这样符合不符合你的要求。还有如果一个文件夹内文件多了读取也会慢的。 内容太多,建议根据首字母或者其他特征来分开多个文本。。
即便是数据库,为了加快速度,也经常采取分表的方法。。
另外,尽量内存操作,不到万不得已,不写入硬盘。。
页:
[1]