回复 9# godhawk
不想用UDF?
如果延用楼主1楼的思想应做如下修改:
#include <array.au3>
$time = TimerInit()
Local $dicline[1], $Error_LineInfo, $i = 1
$dicfile = FileOpen("D:\1.dic", 0) ;载入一个txt文件,但是后缀改为dic
If $dicfile = -1 Then
MsgBox(0, 0, "文件打开错误")
Exit
EndIf
While 1
$temp = FileReadLine($dicfile, $i)
If Not @error Then
ReDim $dicline[$i + 1]
$dicline[$i] = $temp
If StringIsSpace($dicline[$i]) Or StringLen($dicline[$i]) < 1 Then
$Error_LineInfo &= "第" & $i & "行,字符串只包含空白字符." & @CRLF
EndIf
Else
$dicline[0] = UBound($dicline) - 1;定义数组0为行总数
MsgBox(0, "信息提示", "文件读完了!")
ExitLoop
EndIf
$i += 1
WEnd
_ArrayDisplay($dicline, TimerDiff($time))
MsgBox(0, "读取数据", "共" & $i - 2 & "行" & @CRLF & "当前行是" & $dicline[$dicline[0]] & @CRLF & "用时:" & TimerDiff($time))
MsgBox(0, "空行", $Error_LineInfo)
FileClose($dicfile)
但以上代码的效率比较低下.如果文件比较大的话会非常非常慢
用楼主在5楼的思路,如果用正则进行分行的话,倒是比较不错的选择,但如此简单的分行用正则似乎又有点杀鸡用牛刀的感觉,并且用正则的效率也不是最高的.做个简单的比较可知.
$time = TimerInit()
;~ Global $dicline[10000]
$dicfile = FileOpen("d:\1.dic", 0) ;载入一个txt文件,但是后缀改为dic
$dicline = StringRegExp(FileRead($dicfile),'.+',3)
FileClose($dicfile)
msgbox(0,0,TimerDiff($time))
$time=TimerInit()
$dicline=StringSplit(FileRead("d:\1.dic"),@CRLF,1+2)
msgbox(0,0,TimerDiff($time))
以上分别用了正则以及StringSplit函数,因为楼主应该是在WINDOWS下进行文本分行,所以只考虑了@CRLF做为分割符. |