Сбросить индекс объекта 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