我在VB6中有数千个字符串的变体。
我也有一个固定长度的数组
我需要比较每个的内容,并将匹配的内容添加到列表中。
if array(i) = variant(1,i) then
'add to list
End if
我不知道如何正确地迭代以进行比较,因为我用来迭代Variant()的方法在遍历每个项目后停止。所以它从不检查数组中是否有元素等于i+1。
Private Sub dp_Click()
Dim fArray
fArray = Array("a", "b", "c")
LstAPens.ListItems.Clear
LstUPens.ListItems.Clear
For x = 0 To UBound(fArray)
Dim i As Long, m As Integer
'Do Until batcharray(0, i) = "End"
' tmpArray(i) = UCase(batcharray(1, i))
'Loop
Do Until batcharray(0, i) = "End"
If (InStr(1, UCase(batcharray(1, i)), UCase(fArray(x))) > 0) Then
LstAPens.ListItems.Add
With LstAPens.ListItems(m + 1)
.SubItems(1) = batcharray(1, i) 'Tagname
End With
m = m + 1
End If
i=i+1
Loop
Next x
End Sub
我试图将变量转换为数组,但它不工作。
唯一被找到的项是数组中的第一个,当到达末尾时,不再对Variant进行迭代。
我如何在这个例子中迭代名为batchArray的变体,并将其与数组的内容进行比较?
这真的不是一个Variant
问题,它只是一个循环/控制变量的问题。
即使在主循环中有DIM语句,VB也不会将其视为"重新声明"并在UNTIL循环之前重置/重新初始化其值。因此,'i'将增加到1,然后在外部循环的迭代之间保留其值,因此仍然停留在batchArray中的单个值上,迭代停止。
将声明移出循环,在UNTIL
循环之前将其重置为0,看看这是否解决了您的问题:
Dim i as Long
For x = 0 To UBound(fArray)
Dim m As Integer
i = 0
Do Until batcharray(0, i) = "End"
If (InStr(1, UCase(batcharray(1, i)), UCase(fArray(x))) > 0) Then
LstAPens.ListItems.Add
With LstAPens.ListItems(m + 1)
.SubItems(1) = batcharray(1, i) 'Tagname
End With
m = m + 1
End If
i=i+1
Loop
Next x