我有一个大型的Linux格式(即换行符,换行符)文本文件,该文件是程序运行时的“状态”文件。程序运行时将更新此文件。它输出一些有用的消息和定期的标题信息,还输出用空格分隔的数字状态数据行。因为它是一款商业软件(Abaqus / Explicit),所以我无法做任何修改它写入此状态文件的方式。
我不久前写了一个VBA脚本,打开了文件,通过“ Input $”将其作为一个整体读取,通过“ Split(Data,vbLF)”将文件分成几行,并解析每一行以提取数字状态数据并将其放入Excel电子表格中,以供我查看和分析。问题在于,随着程序的继续运行,该文件变得越来越大,以至于无法将整个文件读入Excel。
我一直试图找到一种快速的方法,从我停下来的那一行开始读取文件,而不是将整个内容读到内存中。我试图将EOF()保存到电子表格上的“帮助”单元格,并将其与“搜索”和“线路输入”一起使用,以跳至我停下的位置,但是由于“线路输入”而无法正常工作无法将换行符识别为新行,只能识别回车符或回车换行符。
我花了一些时间浏览其他帖子,这似乎是唯一需要读取整个文件的其他解决方案。有人不知道如何在不读取整个文件的情况下完成此工作吗?
感谢您的时间!
答案 0 :(得分:0)
'perhaps this could be modified for new start
Sub read_bookmark()
Dim linein, tline, endmark, linevalid, filelen, fread
Dim chx As Byte
Dim fpath, mes, a
On Error GoTo ErrHand
mes = "Enter path & filename of Bookmark import file."
'fpath = InputBox(mes, "", "c:\temp\bookmarks_12_8_18.html")
fpath = "c:\temp\test.txt"
If Len(fpath) = 0 Or (Len(Dir(fpath)) = 0) Then
MsgBox ("File not found. Program canceled")
End
End If
tline = ""
linein = ""
endmark = False
linevalid = False
Open fpath For Binary Access Read As #1
filelen = LOF(1) ' Get length of file.
For fread = 1 To filelen
Get #1, , chx
If chx = 13 Or chx = 10 Then
endmark = True
ElseIf endmark = True Then 'wait till no more endmarks
endmark = False
tline = linein
linevalid = True
linein = Chr(chx) 'keep chr after endmarks
Else
linein = linein + Chr(chx)
End If
If linevalid = True Then
'proc tline
tline = ""
linevalid = False
End If
Next
'proc last linein chrs
MsgBox ("Processing Complete")
Exit Sub
ErrHand: ' Error-handling routine.
Close #1
MsgBox "Error in HTML read " + Error(Err)
End
End Sub