日期:2014-05-19  浏览次数:20948 次

怎么用最快的方式得到一个txt文件的行数?
因为文件相当大,所以想用processbar显示进度,但是如果先readline一遍才知道行数的话未免太搞笑了点,所以问问大家有什么好办法?

------解决方案--------------------
关注
------解决方案--------------------
搂主寻求时间最优还是空间最优?
------解决方案--------------------
行数是怎么定义的?换行符吗?
那就找换行符,找换行符最快的方法是什么?逐个字节读,看哪个是换行符~~
所以,你说没有快的方法?
所以说,谁比较搞笑啊?
------解决方案--------------------
正如he_8134(只有星星伴明月)所说的,想要知道准确行数没有任何捷径可走,必须一个个字节读下来才知道,但是对于你的需求来说,好像只是为了增进读取大文件时候的用户体验,我们可以做一些work around。

解决方案1:使用Marquee型ProgressBar。
优点:简单易行
缺点:当然用户没法知道准确进度,只知道应用程序没死正在工作

解决方案2:按字节计算当前进度,而不是行数,因为我们可以轻易的获得文件的字节大小,而不是总行数。
优点:可以准确知道读取进度
缺点:code比较复杂,需要用到BackgroundWorker类

如果对BackgroundWorker用法有疑问,可以查阅MSDN或者Email我:TonyWhiteWhite@Hotmail.com

------解决方案--------------------
dim mfile as string
mfile= "c:\test.txt "
dim buff() as byte
dim i as long
i=filelen(mfile)
redim buff(i-1)
open mfile for binary as #1
get #1,,buff
close #1
dim s as string
s=strconv(buff,vbunicode)
erase buff
dim arr() as string
arr=split(s,vbcrlf)
msgbox "文件共有行数: "+cstr(ubound(arr)+1)
------解决方案--------------------
arr() 这个数组大极了,还不知道有没有超限制呢
------解决方案--------------------
StreamReader sr
sr.ReadToEnd().Split( '\r\n ').Length;
------解决方案--------------------
你可以先得到文件的字节大小,然后每次读完一行后用这个读来的字节总和和文件大小总数百分比来控件进度条伯显示比用行数要准且易于实现.
------解决方案--------------------
因为你是在加载文件过程中显示进度条,所以用读入的字节数和总得文件字节数比是最合适的.
------解决方案--------------------
你可以直接读出回车换行符的数量,也就是你要的行数;
另外,在读完最后一个换行符时要看看还有没有文字,如果有,就在行上+1就可以了。
------解决方案--------------------
为什么要用行数?直接用字节大小不就行了么?
------解决方案--------------------
涨知识了
------解决方案--------------------
StreamReader sr
sr.ReadToEnd().Split( '\r\n ').Length;

------解决方案--------------------
up
------解决方案--------------------
up

------解决方案--------------------
StreamReader sr
sr.ReadToEnd().Split( '\r\n ').Length;


全部读取再来计算行数,真是太有才了,本末倒置~~`
------解决方案--------------------
Function pbar()
Dim fso As New FileSystemObject, fil As File, ts As TextStream

Set fil = fso.GetFile(Text1.Text)
Set ts = fil.OpenAsTextStream(ForReading)

Do While Not ts.AtEndOfStream
ts.SkipLine
Loop
pbar = ts.Line
End Function

------解决方案--------------------
StreamReader sr
sr.ReadToEnd().Split( '\r\n ').Length;

=====================================

这个牛~~^_^