gpt4 book ai didi

arrays - 填充临时数组以避免在动态多维数组上使用 Preserve

转载 作者:行者123 更新时间:2023-12-02 11:38:02 25 4
gpt4 key购买 nike

作为 VBA 的初学者,我正在尝试临时学习大部分内容,所以请原谅我的灰尘。

我正在编写一个子例程,用于读取文本文件中的行。每行均以空格分隔,并以 ' 作为文本标识符。我要求将每一行作为多维数组分成多个字段。

Sub ReadLines()
Dim LineValues() As String
Dim row As Long, col As Long
Dim DataArray() As String
Dim TempArray() As String
Dim FileContent As String
Dim FilePath As String

FilePath = "c:\mytextfile.txt"
row = 0
TextFile = FreeFile
Open FilePath For Input As TextFile
FileContent = Input(LOF(TextFile), TextFile)
Close TextFile
LineValues = Split(FileContent, vbCrLf)

For X = LBound(LineValues) To UBound(LineValues)
If Len(Trim(LineValues(X))) <> 0 Then
DataArray = Split(LineValues(X), "'")
col = UBound(DataArray)
TempArray = DataArray
ReDim DataArray(col, row)
For i = LBound(TempArray) To UBound(TempArray)
DataArray(i, row) = TempArray(i)
Next i
End If
row = row + 1
Next X

在与 ReDim Preserve 的多维问题进行斗争后,我找到了这段代码。 (只能修改最后一个维度)我的文本文件中的多维数组将具有未知的列和行,具体取决于用户输入。

这段代码正确地执行了该过程...但只是无法正确存储数组元素!上面的目的是在 ReDim(并清空)我感兴趣的数组 (DataArray) 时使用临时数组 (TempArray),然后将最初从 DataArray 中的元素复制回调整大小的维度。

但是,当单步执行代码时,我可以看到每一行都被正确放置,但随后在该行的每次迭代中被删除, DataArray = Split(LineValues(X), "'")

我本质上有一个矩阵,其大小由总行数决定,但仅由最后一行的列数(并且仅最后一行的值)决定。

我知道为什么会发生这种情况,但是这里有人能提出解决方案吗?作为初学者,这有点让人抓狂!

编辑,完整问题描述

为了充分澄清,这是一个子例程,我将作为读取包含不相关数据的文本文件的脚本的一部分来调用。这个文本文件看起来有点像这样,(引用文献的模糊性是故意的)

 '<irrelevant text I want to ignore until seeing pattern 'NumberOfVariables?'>
...
...
NumberOfVariables?
NUMBEROFVARIABLES
'for the end user, I need to be able to pull information from each of these fields assigned to a variable to create strings as headers as per a specific format
'note that variable and variable type
Variable#1 VARIABLETYPE Location? LOCATION UNITS DESCRIPTION 'text for each field is enclosed as follows '' (code formatting on site prevents me doing this)
Variable#2 VARIABLETYPE Location? LOCATION UNITS DESCRIPTION
...
Variable#NUMBEROFVARIABLES
' from here there is a column of data that is assigned to each variable such that
Variable#1Element1 Variable#2Element1 'etc until #NUMBEROFVARIABLES
Variable#1Element2 Variable#2Element2
Variable#1Element3 Variable#2Element3
Variable#1FinalElement Variable#2FinalElement

主要目标是使用原始帖子中的脚本来获取多维矩阵中的这些字段,然后我可以根据某些条件语句使用这些字段来根据最终用户的需求获取标题字符串。

从这里我会找到一种方法,使数据列与每个变量相匹配,以便可以将其自动输入到 Excel 中。

更进一步的是某种带下拉菜单的 MsgBox,它可以选择要复制的变量,但在我现在的开发阶段,这只是天上掉馅饼!

最佳答案

试试这个。我没有测试过:

Sub ReadLines()

Const FilePath$ = "c:\mytextfile.txt"

Dim iFile%, c&, i&, j&, k&, Content$, Lines, Temp, Data

c = 499
Open FilePath For Input As #iFile
Content = StrConv(InputB(LOF(iFile), iFile), vbUnicode)
Close #iFile

Lines = Split(Content, vbCrLf)
ReDim Data(0 To UBound(Lines), 0 To c)

For i = 0 To UBound(Lines)
If Len(Trim$(Lines(i))) Then
Temp = Split(Lines(i), "'")
If k < UBound(Temp) Then k = UBound(Temp)
If k > c Then
c = k * 2
ReDim Preserve Data(0 To UBound(Lines), 0 To c)
End If
For j = 0 To UBound(Temp)
Data(i, j) = Temp(j)
Next
End If
Next
ReDim Preserve Data(0 To UBound(Lines), 0 To k)

End Sub

关于arrays - 填充临时数组以避免在动态多维数组上使用 Preserve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33761314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com