有時候我發現自己在填充數組時不必先定尺寸。大多數情況下,我可以通過一個循環來驗證條件已被驗證的次數,ReDim
我的數組相應,然後與相同,非常循環用數據填充數組。
這是(尤其是與humongous陣列)非常耗時,並沒有優化。VBA - 將數據插入數組而無需設定尺寸
今天,我發現自己編程「讀書」的文本文件,在其中我不得不驗證行了多少次空單重複之前,無需多少可以有任何線索。我只知道,這樣的線的最小數量爲1
文件看起來是這樣的:
TITLE Very_Much_Potato
INFO lol?
FREQUENCY 123456.7
DEF_DIAG 1 Potato1.TXT
DEF_DIAG 2 Potato2.TXT
ELEMENT 1 0.00 0.00 -300.00 0.250 0.0 6.0 1 2 0.00 0.0 0.0
ELEMENT 2 0.00 0.00 -200.00 0.500 20.0 6.0 1 2 0.00 0.0 0.0
ELEMENT 3 0.00 0.00 -100.00 0.750 40.0 6.0 1 2 0.00 0.0 0.0
ELEMENT 4 0.00 0.00 0.00 1.000 60.0 6.0 1 2 0.00 0.0 0.0
ELEMENT 5 0.00 0.00 100.00 0.750 80.0 6.0 1 2 0.00 0.0 0.0
ELEMENT 6 0.00 0.00 200.00 0.500 100.0 6.0 1 2 0.00 0.0 0.0
ELEMENT 7 0.00 0.00 300.00 0.250 120.0 6.0 1 2 0.00 0.0 0.0
END
我用下面的代碼來「閱讀」:
Dim i As Integer
Dim fd As FileDialog, FilePath As String
Dim fst As Object, StringData As String
Dim Name As String, Frequency As Double, DefDiag() As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Select the file you would like to import"
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Potato File", "*.pot"
.FilterIndex = 1
If .Show <> -1 Then
End
End If
FilePath = .SelectedItems(1)
End With
Set fst = CreateObject("ADODB.Stream")
fst.Charset = "utf-8"
fst.lineseparator = 10 ' sets enter as end-of-line separator
fst.Open
fst.LoadFromFile FilePath
StringData = fst.ReadText(-2) ' -2 to read until lineseparator
Name = Mid(StringData, 7)
StringData = fst.ReadText(-2)
StringData = fst.ReadText(-2)
Frequency = CDbl(Mid(StringData, 11))
Do Until fst.ReadText(-2) = ""
StringData = fst.ReadText(-2) ' DEF_DIAG
DefDiag(i) = Right(StringData, Len(StringData) - InStrRev(StringData, " "))
i = i + 1
Loop
自然,停止DefDiag
陣列開始填充的位置。任何想法如何不維度?
不錯,順利的把戲!正是我需要的 – Noldor130884