如何快速计算多个文本文件中的行数?

Bla*_*ail 5 excel vba counter row excel-vba

我有超过100个文本文件,我必须计算每个文本的行数.Column A列出文件名,位于指定的文件夹中E1.有几个文件有超过100万行,导致脚本运行的时间非常长.

截图

Sub counter()
    Dim fso As New FileSystemObject
    Dim ts As TextStream
    Dim longtext As String
    Dim lines As Variant
    Dim GoToNum As Integer
    Dim Start As Integer
    GoToNum = 2
    Start = 3

    Do Until IsEmpty(Cells(Start, 1))
        GoToNum = GoToNum + 1
        Start = Start + 1
    Loop

    For i = 3 To GoToNum
        If Cells(i, 2).Value <= Cells(2, 5).Value Then
            ConOrg = Cells(1, 4).Value & "\" & Cells(i, 1).Value

            Set ts = fso.OpenTextFile(ConOrg, ForReading, False)
            longtext = ts.ReadAll

            ts.Close
            lines = Split(longtext, vbLf)
            Cells(i, 3) = UBound(lines) - LBound(lines) - 1

        End If
    Next i
End Sub
Run Code Online (Sandbox Code Playgroud)

如何获取最后一行的数字(来自文本文件)以避免逐行计数?

ash*_*awg 7

如何使用VBA计算文本文件中的行:

40 MB文件(170万行)
- CountLF= 25.2秒
- CountLines= 2.1秒

14个B档(6行)×10,000倍
- CountLF= 1.3秒
- CountLines= 18.9秒


更适合小文件:

Function countLF(fName As String) As Long
    Dim st As String
    Open fName For Input As #1: st = Input(LOF(1), 1): Close #1
    countLF = Len(st) - Len(Replace(st, vbLf, "")) + 1
End Function
Run Code Online (Sandbox Code Playgroud)

用法示例:

Debug.Print countLF("c:\test.txt")
Run Code Online (Sandbox Code Playgroud)

更适合大型文件:

Function countLines(fName As String) As Long
    countLines = CreateObject("Scripting.FileSystemObject").OpenTextFile(fName, 8, True).Line
End Function
Run Code Online (Sandbox Code Playgroud)

用法示例:

Debug.Print countLines("c:\test.txt")
Run Code Online (Sandbox Code Playgroud)

更多基准测试: (2500个小文本文件)
二进制访问/获取 (4.32s)杀死= 1.17s...打开F进行二进制访问读取为#1:ReDim ...获取#1
,,,字节行输入/ LineInput (4.44s)Kill = 1.11s...打开F输入为#iFile ...行输入#1,st
Early Bind/ReuseObj (5.25s)Del = 1.12s...设置o = New Scripting.FileSystemObject':st = o.OpenTextFile(F).ReadAll()
Early Bind/FreshObj(11.98s)Del = 1.35s...设置o = New Scripting.FileSystemObject':st = o.OpenTextFile(F).ReadAll()
LateBind/ReuseObj (6.25s)Del = 1.47s...设置o = CreateObject("Scripting.FileSystemObject")
LateBind/FreshObj (13.59s)Del = 2.29s...使用CreateObject("Scripting.FileSystemObject")