havano 发表于 2007-10-29 11:24:31

一个txt文件有多少行?

我想将任意txt文件的行读取到字符串数组中。但我不想使用Redim保留,也不想打开文件两次:一次用于计数行数,然后在使用其索引的行数声明字符串数组后再次打开,以便将文本行读取到该数组中。应该有一个“清洁”方法。
我的问题:是否有返回行数的标准函数?
**** Hidden Message *****

havano 发表于 2007-10-29 12:03:21

以前从没见过劈叉。事实上,这个解决方案需要最少的编码。谢谢!

Fatty 发表于 2007-10-29 14:20:33


虽然我很欣赏它的简洁,但这并不是最少的代码,但是性能非常好——即使是在非常大的文件上。
对一个包含64,000行文本(每行128个字符)的文本文件的快速测试几乎是即时的。
就像我说的,我个人很有兴趣看到一个性能优于它的vba替代方案。

havano 发表于 2007-10-29 14:29:47

这是我的2美分,部分是从MP
Option Explicit
Sub test()
    Dim streams() As String
    ''please use a valid path in the following
    ''btw size of localldd.txt is 45.6 Mb
    ''you can get this file from:
    ''http://www.gomr.mms.gov/homepg/pubinfo/freeasci/pipeline/freepipe.html
    streams = FileToArray("D:\VBA_TEST\localldd.txt")
   
    Debug.Print (UBound(streams) - LBound(streams)) + 1; "line(s) of text retrieved."
End Sub
Function FileToArray(fName As String) As String()
    Dim txt As String
    Dim fs As Object
    Dim fl As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set fl = fs.OpenTextFile(fName)
    txt = fl.ReadAll
    fl.Close
    FileToArray = Split(txt, vbCr)
End Function

~'J'~

Fatty 发表于 2007-10-29 14:57:23

干杯~

havano 发表于 2007-10-30 21:48:08


嘿伙计们
这真的很酷!
我知道这显然是必要的,否则就不会提出这个问题,但我想知道我该如何阐述这个问题?谢谢马克

havano 发表于 2007-10-31 07:26:32


哦,胖子,还有,为什么是+1?
标记

havano 发表于 2007-10-31 12:24:46

连我都可以回答
假设,你声明了一个数组MyArray (0到4)。那么LBound = 0,UBound = 4。
显然,4 - 0 = 4。然而,该数组可以保存5个值(索引范围= 0 1 2 3 4)。
因此出现了“+ 1”。
很高兴能为您服务
我提问的原因是为了获得最高速度。所以我希望最小的内存/值重新分配(Redim Preserve)和/或硬盘活动(打开/读取一个文件两次)。
页: [1]
查看完整版本: 一个txt文件有多少行?