gpt4 book ai didi

vba - 读取大文本文件 VB6 中的行数

转载 作者:行者123 更新时间:2023-12-04 20:05:46 28 4
gpt4 key购买 nike

我有大小为 230MB 的文本文件。我想计算该文件的行数。

我试过“Scripting.FileSystemOblect”,但内存不足。

请帮助。

谢谢。

最佳答案

正常的 Windows 换行符是 CRLF,因此如果文件的最后一行后面没有换行符,您可以计算 LF 并在计数中加 1。

在真正的 VB(即 VB5、VB6 等)中,您可以利用面向字节的字符串操作来加速许多任务。如果我们可以假设文本文件包含 ANSI 那么这非常快:

Option Explicit

Private Sub Main()
Const BUFSIZE As Long = 100000
Dim T0 As Single
Dim LfAnsi As String
Dim F As Integer
Dim FileBytes As Long
Dim BytesLeft As Long
Dim Buffer() As Byte
Dim strBuffer As String
Dim BufPos As Long
Dim LineCount As Long

T0 = Timer()
LfAnsi = StrConv(vbLf, vbFromUnicode)
F = FreeFile(0)
Open "big.txt" For Binary Access Read As #F
FileBytes = LOF(F)
ReDim Buffer(BUFSIZE - 1)
BytesLeft = FileBytes
Do Until BytesLeft = 0
If BufPos = 0 Then
If BytesLeft < BUFSIZE Then ReDim Buffer(BytesLeft - 1)
Get #F, , Buffer
strBuffer = Buffer 'Binary copy of bytes.
BytesLeft = BytesLeft - LenB(strBuffer)
BufPos = 1
End If
Do Until BufPos = 0
BufPos = InStrB(BufPos, strBuffer, LfAnsi)
If BufPos > 0 Then
LineCount = LineCount + 1
BufPos = BufPos + 1
End If
Loop
Loop
Close #F
'Add 1 to LineCount if last line of your files do not
'have a trailing CrLf.
MsgBox "Counted " & Format$(LineCount, "#,##0") & " lines in" & vbNewLine _
& Format$(FileBytes, "#,##0") & " bytes of text." & vbNewLine _
& Format$(Timer() - T0, "0.0#") & " seconds."
End Sub

给定一个 7,000,000 行的 293MB 文件,这里只需要 0.7 秒。但请注意,我没有重新启动以确保在运行该测试时文件未被缓存。如果没有缓存(即重启后),我希望它花费的时间是它的 5 倍。

转换以处理 Unicode 文本文件相当简单。只需将 B 函数替换为非 B 函数,确保将 BUFSIZE 设置为 2 的倍数,并搜索 vbLf 而不是 ANSI LF 字节。

关于vba - 读取大文本文件 VB6 中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598691/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com