Сравните элементы в массиве с элементами в варианте в VB6

У меня есть вариант в 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 в массив, но это не сработало.

Единственный найденный элемент — это первый элемент в массиве, затем Variant больше не повторяется, поскольку он достиг конца.

Как я могу перебрать Variant с именем batchArray в этом примере и сравнить его с содержимым массива?


person redned    schedule 03.06.2015    source источник
comment
Ваша переменная итерации i никогда не присваивается и не увеличивается в этом цикле... она была просто пропущена?   -  person David W    schedule 03.06.2015
comment
Извините, я набрал код вручную, так как работаю на изолированном сервере. Это код, над которым я работаю. Я отредактирую вопрос.   -  person redned    schedule 03.06.2015
comment
Продолжая рассматривать это, я не вижу, как код цикла until либо всегда выполняется, либо когда-либо останавливает выполнение, как опубликовано, учитывая, что переменная цикла i никогда не изменяется. Интересно, что-то упущено? Спасибо, если бы вы могли просмотреть/проверить опубликованный код..Спасибо!! :)   -  person David W    schedule 03.06.2015
comment
Хммм... Я бы, наверное, хотя бы попытался переместить объявление "i" за пределы цикла и явно установить его на 0.   -  person David W    schedule 03.06.2015


Ответы (1)


Это действительно не проблема Variant, это просто проблема с зацикливанием/управлением переменной.

Несмотря на то, что у вас есть оператор DIM внутри вашего основного цикла, VB не рассматривает это как «повторное объявление» и не сбрасывает/повторно не инициализирует его значение перед циклом UNTIL. В результате «i» будет увеличиваться до 1, а затем сохранять свое значение между итерациями вашего внешнего цикла, таким образом, оставаясь на одном значении в batchArray, и итерация прекращается.

Переместите объявление за пределы цикла, сбросьте его на 0 перед циклом UNTIL и посмотрите, решит ли это вашу проблему:

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
person David W    schedule 03.06.2015