阅读的行数在大文本文件VB6(Read Number of lines in Large Text

2019-07-04 04:36发布

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

我想“ Scripting.FileSystemOblect ”,但它熄灭内存。

请帮忙。

谢谢。

Answer 1:

正常的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

鉴于293MB的700万线的文件,只需要在这里0.7秒。 但请注意,我没有重新启动,以确保当我跑了检验该文件没有缓存。 如果没有高速缓存(即重新启动后),我希望它需要长达5倍。

转换处理Unicode文本文件是相当简单的。 仅仅通过非-B等价替换B-功能,请确保您设置BUFSIZE以2的倍数,并搜索vbLf ,而不是一个ANSI LF字节。



Answer 2:

您可以通过阅读每一行到相同的变量做到这一点。 有没有必要保存所有行:

dim s as string
dim n as integer

open "filename.txt" for input as 1

n = 0
do while not eof(1)
  line input #1, s
  n = n + 1
  loop

这并没有经过测试,并且它已经有一段时间,因为我做了任何VB6,但应密切。



Answer 3:

这需要我大约6秒与1密耳+为0xD(VBCR)一个480MB的二进制文件

Dim buff() As Byte
Dim hF As Integer
Dim i As Long, n As Long

hF = FreeFile(0)

Open "c:\windows\Installer\2f91fd.msp" For Binary Access Read As #hF
ReDim buff(LOF(hF) - 1)
Get #hF, , buff()
Close #hF

For i = 0 To UBound(buff)
    If buff(i) = 13 Then n = n + 1
Next

MsgBox n


文章来源: Read Number of lines in Large Text File VB6
标签: vba text vb6