大家好,
我遇到以下问题:我有一个多行字符串,并且想将其拆分为带有字典的列表。
例如,我有以下字符串:
input = "Bla Bla2 Bla3" & vbLf & "Bla21 Bla22 Bla23"
我想将其拆分为一个数组,其中每个条目包含1行(即,第一个条目的第一行,依此类推)。条目本身应该是字典,其中每一列(用“”分隔的单词)由一个单词定义。
作为示例,这里有“ 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
现在-我的问题是针对所有列进行通用化-即将字典集成到其中。
我在“ line = Split ...)”下面添加了初始化新字典的步骤
Set d = New dictionary
然后直接在if子句下方设置值
d("col1") = line(0)
d("col2") = line(1)
d("col3") = line(2)
最后,我想将数组元素设置为与此字典相等:
result(Ubound(result)) = d
但是,这不起作用。像这样运行时,出现“参数不可选”错误。添加集合时,即:
Set result(Ubound(result)) = d
我收到“需要对象”错误。
有人可以帮助我解决此错误吗?
谢谢您的问候。
/ edit:为了使生活更轻松,这是我当前正在使用的实际功能:
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