Сбросить индекс объекта File для чтения несколько раз

Сейчас я пишу программу VBA. В моей программе, во-первых, мне нужно сосчитать всю строку из файла. Мне нужно количество строк из-за создания массива для строки в файле. Итак, я использовал этот код. Все в порядке.

'Open file
Set file = fsObject.OpenTextFile(filePath, ForReading)

'Read all line
file.ReadAll

'Get line count
lineCount = file.line

'Close file
file.Close

После получения количества строк я хочу вычесть из него 2 для верхнего и нижнего колонтитула (пустая строка). Я не знаю, какое слово будет заголовком. Я знаю только строку, что это первая строка и последняя строка (пустая строка).

'Remove header and blank line from line count
lineCount = lineCount - 2

И затем, я хочу читать этот файл построчно, которые полезны только для меня, и хранить все строки в массиве. Проблема в том, что при чтении построчно необходимо заново открыть файл. Только после повторного открытия я могу читать построчно.

Потому что метод "ReadAll" читает всю строку и индекс file Объект отображается "AtEndOfFile". Итак, я должен снова открыть его. Пожалуйста, проверьте мой код.

'If line count is greater than 0, read again file to get data
If lineCount > 0 Then

    'Re-define array size
    ReDim lineList(lineCount) As String

    'Here I opend it, I don't wanna open. I just want to set index of file object.
    'Re-open file
    Set file = fsObject.OpenTextFile(filePath, ForReading)

    'Read file until end
    Do Until file.AtEndOfStream

        'If current line is not first line(header) or last line(blank line)
        If line <> 0 And line <= lineCount Then

            'Store line into array
            lineList(index) = file.ReadLine

            'Increase array index
            index = index + 1

        Else

            file.ReadLine

        End If

        'Increase line index
        line = line + 1

    Loop

End If

Но я хочу другой путь. Я не хочу заново открывать файл. Я хочу сбросить индекс на первую строку file объект. Так что мне не нужно его снова открывать.

Я уже ищу об этом в интернете. Но я не нашел никаких предложений для этого. Пожалуйста, помогите мне. Благодарю.

1 ответ

Мой подход немного отличается от вашего текущего подхода, я бы использовал двоичное чтение, чтобы прочитать файл и сохранить его во временной строке, а затем использовать функцию Split, чтобы поместить их в массив.

У этого метода есть один недостаток, так как если длина (количество символов) файла больше, чем размер переменной String, у нас могут быть проблемы, но кроме этого. Это совсем другой подход.

Public Sub ReadFileData(filePath As String, Optional separatorStr As String = ";@;")
'******************************************************************************
'   Opens a large TXT File, reads the data until EOF on the Source,
'       then stores them in an Array
'   Arguments:
'   ``````````
'       1. The Source File Path - "C:\Users\SO\FileName.Txt" (or) D:\Data.txt
'       2. (Optional) Separator - The separator, you wish to use. Defauls to ';@;'
'*******************************************************************************
    Dim strIn As String, tmpStr As String, lineCtr As Long
    Dim tmpArr() As String

    Open filePath For Input As #1

    Do While Not EOF(1)
        'Read one line at a time.
        Line Input #1, strIn
        tmpStr = tmpStr & Trim(strIn) & separatorStr
        lineCtr = lineCtr + 1
    Loop
    Close #1

    tmpArr = Split(tmpStr, separatorStr)

    Debug.Print "Number of Elements in the Arrays is - " & UBound(tmpArr)
    Debug.Print "Number of Lines Read is - " & lineCtr
End Sub
Другие вопросы по тегам