【已解决】请问如何提升/优化文本读取的效率
本帖最后由 setion 于 2014-1-21 10:36 编辑我现在有一个几万行的文本,数据格式大概如下
2013-01-02 01:02:03: -9
2013-01-02 01:02:04: -11
2013-01-02 01:02:05: -10
2013-01-02 01:02:06: -13
2013-01-02 01:02:07: -14
2013-01-02 01:02:08: -13
2013-01-02 01:02:09: -12
我需要取最后面的那个负数,我现在用的方法是通过 FileReadLine()读取每行的数据,然后在用StringRegExp()通过正则表达式来取最后那个数字,数据少的时候,大概1ms能处理一行数据,但是数据量大的时候就很慢了。3W行数据花了至少十多分钟,分析了一下,应该是文件太大,FileReadLine花费的时间太久,我想把文本预读到内存里然后再操作,或者使用其它方法,求高手指点,不胜感激,谢谢{:face (239):} 对于较大的文件用FileOpen先获取句柄。我在公司的老电脑上测试5w行的文件,用以下代码0.3s左右能获取完数字,用_ArrayDisplay显示花费时间多一些,不过7s左右也能显示出来了。#include <array.au3>
$hTimer = TimerInit()
$hFile = FileOpen("test.txt")
$sText = FileRead($hFile)
FileClose($hFile)
$aNum = StringRegExp($sText, "(?m)\:\s+(-\d+)", 3)
$iDiff = TimerDiff($hTimer)
ConsoleWrite("Time: " & $iDiff / 1000 & "s")
If IsArray($aNum) Then _ArrayDisplay($aNum) 回复 2# haijie1223
谢谢你,我已经自己优化了。
昨天是这样写的
$File = fileopen($Path)
$Content = FileRead($File)
for $line = 1 to xxx Step 1
$LineContent = FileReadLine($Content,$line)
$RSSI = StringRegExp($LineContent , 'regExp' , 3)
next
这样写有问题,修改成如下就OK了
$File = fileopen($Path)
$Content = FileRead($File)
;for $line = 1 to xxx Step 1
;$LineContent = FileReadLine($Content,$line)
$RSSI = StringRegExp($Content , 'regExp' , 3)
;next 回复 3# setion
能用正则的就不要用循环读取之类的命令~ 我就有此问题,之前用的方法与LZ一样
看来我需要改代码了
谢谢2楼
页:
[1]