现在,我正在编写一个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
对象的第一行。所以,我不需要重新打开它。
我已经在网上搜索过了。但是,我没有找到任何建议。请帮我。感谢。
答案 0 :(得分:0)
我的方法与您当前的方法略有不同,我会使用二进制读取来读取文件并将其保存在临时字符串中,然后使用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