때로는 먼저 치수를 지정하지 않고 배열을 채우는 문제에 직면합니다. 대부분의 경우 루프를 통해 조건이 몇 번 확인되었는지 확인할 수 있습니다. 따라서 ReDim
내 배열이 적절하고 루프와 동일한 매우 동일한 루프 배열로 데이터를 채 웁니다.
이것은 (특히 거대한 배열과 함께) 매우 시간이 많이 걸리고 최적화되지 않았습니다.VBA - 치수 지정하지 않고 배열에 데이터 삽입
오늘 텍스트 파일을 프로그래밍 방식으로 "읽는 중"이라는 것을 발견했습니다. 텍스트 파일을 읽는 횟수가 얼마나되는지에 대한 실마리가없는 빈 줄 이전에 줄이 몇 번 반복되었는지를 확인해야했습니다. 나는 "그것을 읽고"다음 코드를 사용
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
: 나는 그런 라인의 최소 수는 파일은 다음과 같습니다 1.
만 알고
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