«Недостаточно памяти» останавливает счетчик строк - PullRequest
0 голосов
/ 11 июня 2018
  • Колонка «A»: список имен текстовых файлов
  • Колонка «B»: сколько строк должно быть в текстовых файлах
  • Колонка «C»: сколькофактически в текстовых файлах есть строки
  • E1: исходный путь
  • E2: ограничитель, строки текстового файла будут подсчитаны, если номер RowInSummary текстового файла равен или меньше, чем E2

Мой скрипт подсчитывает строки всех файлов.Но если я установил лимитер слишком высоким (например, 500.000 или 1M) или просто слишком много файлов, скрипт не будет подсчитывать строки всех файлов, потому что программе не хватает памяти.(Ограничитель не нужен, я поставил его как проблему «не хватает памяти», изначально я не хочу его использовать.)

enter image description here

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

Как скрипт может считать строки всех файлов без "исчерпания памяти"?

1 Ответ

0 голосов
/ 11 июня 2018

Вот пример того, как вы можете избежать fso и все еще делать то, что вы хотите.

   Sub LinesCounter()

    Dim Path As String
    Dim FileName As String
    Dim SomeText As String
    Dim TextLine As String
    Dim LineCounter As Long
    Dim i As Long
    Dim GoToNum, Start As Long

    Path = Cells(1, 5).Value
    Start = 3

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

    For i = 3 To GoToNum
            FileName = Cells(i, 1).Value

            Open Path & FileName For Input As #1
                Do Until EOF(1)
                    Line Input #1, TextLine
                    'SomeText = SomeText & " " & TextLine
                    LineCounter = LineCounter + 1
                Loop
            Close #1
            'you can comment line below, it's only for testing
            Debug.Print "There is a: " & LineCounter & " lines in " & _
            FileName & " text file."

            'Adding values to Excel sheet
            Cells(i, 3) = LineCounter
    Next i
    End Sub
...