Arrays VBA:使用字典将多行字符串拆分为列表
大家好 我有以下问题:我有一个多行字符串,想用字典将其拆分成一个列表 例如,我有以下字符串:Arrays VBA:使用字典将多行字符串拆分为列表,arrays,vba,dictionary,Arrays,Vba,Dictionary,大家好 我有以下问题:我有一个多行字符串,想用字典将其拆分成一个列表 例如,我有以下字符串: input = "Bla Bla2 Bla3" & vbLf & "Bla21 Bla22 Bla23" 我想把它分割成一个数组,其中每个条目包含一行(即,第一条条目第一行,依此类推)。条目本身应该是字典,其中每一列(以“”分隔的单词)都由一个单词定义 例如,这里有“col1”、“col2”和“col3” 结果应该是一个包含2个元素的列表,每个元素应该是一个字典,其中d(“col1”)
input = "Bla Bla2 Bla3" & vbLf & "Bla21 Bla22 Bla23"
我想把它分割成一个数组,其中每个条目包含一行(即,第一条条目第一行,依此类推)。条目本身应该是字典,其中每一列(以“”分隔的单词)都由一个单词定义
例如,这里有“col1”、“col2”和“col3”
结果应该是一个包含2个元素的列表,每个元素应该是一个字典,其中d(“col1”)包含第一个条目的“Bla”,第二个条目的“Bla21”
通过拆分输入,我能够拆分字符串并将第一列馈送到最终数组中
ar = Split(input,vbLf,,vbTextCompare)
pos = 0
然后在该数组上进行交互-向结果数组动态添加条目
Do while pos < UBound(ar)
line = Split(ar(pos))
if Len(Join(result)) = 0 Then
ReDim Preserve result(0)
else
ReDim Preserve result(Ubound(result)+1)
result(Ubound(result)) = line(0)
pos = pos + 1
Loop
并在if子句的正下方设置值
d("col1") = line(0)
d("col2") = line(1)
d("col3") = line(2)
最后,我想将数组元素设置为这个字典:
result(Ubound(result)) = d
然而,这是行不通的。像这样运行时,我会得到一个“参数非可选”错误。添加集合时,即:
Set result(Ubound(result)) = d
我得到一个“需要对象”错误
有人能帮我纠正这个错误吗
谢谢你和亲切的问候
/编辑:为了让生活更轻松,这里是我目前使用的实际功能:
Function IterateString(text as String)
Dim pos as Integer
Dim entry() as String
Dim line() as String
Dim result() as String
Dim MyDict as Scripting.Dictionary
entry = Split(text,vbLf,,vbTextCompare)
pos = 0
result = Array()
Do While pos < Ubound(entry)
If Trim$(entry(pos)) <> "" Then
line = Split(entry(pos))
Set MyDict = New Scripting.Dictionary
If Len(Join(result)) = 0 Then
ReDim result(0,0)
Else
ReDim Preserve result(UBound(result,1) + 1)
End If
MyDict.Add "col1",line(0)
MyDict.Add "col2",line(1)
Set result(Ubound(result,1)) = MyDict
End If
pos = pos + 1
Loop
IterateString = result
End Function
函数迭代字符串(文本为字符串)
作为整数的Dim pos
Dim entry()作为字符串
作为字符串的Dim line()
Dim result()作为字符串
将MyDict设置为脚本.Dictionary
条目=拆分(文本、vbLf、vbTextCompare)
pos=0
结果=数组()
当pos
哪里定义了结果
?你的字典只限于每一行吗?那么这些线本身就是数组元素。所以类似于ar(N)(“Col 3”)的东西是可以接受的?结果在最顶端定义(就像pos、line和ar)-pos为整数,line()为字符串,result()为字符串是字典应该限制在每一行-因此每一行都包含自己的字典-并且ar(N)(“Col 3”)目前应该可以接受,仅将字典设置为与列表项相等是不起作用的-其余部分似乎正常,但结果从未被分配值..目前没有任何PC分配值,因此一个盲点:尝试“Dim result()As dictionary”以及“Set result(Ubound(result))=d”谢谢你-我真的不明白为什么我需要这个-但我现在知道了,它可以工作了-谢谢:)
Function IterateString(text as String)
Dim pos as Integer
Dim entry() as String
Dim line() as String
Dim result() as String
Dim MyDict as Scripting.Dictionary
entry = Split(text,vbLf,,vbTextCompare)
pos = 0
result = Array()
Do While pos < Ubound(entry)
If Trim$(entry(pos)) <> "" Then
line = Split(entry(pos))
Set MyDict = New Scripting.Dictionary
If Len(Join(result)) = 0 Then
ReDim result(0,0)
Else
ReDim Preserve result(UBound(result,1) + 1)
End If
MyDict.Add "col1",line(0)
MyDict.Add "col2",line(1)
Set result(Ubound(result,1)) = MyDict
End If
pos = pos + 1
Loop
IterateString = result
End Function