1

Тема: VBS Работа с массивами

Для поиска значения в массиве в VB микрософт предлагает такой код:

Public Sub findAnimal()
    Dim zooAnimals(2) As String
    zooAnimals(0) = "lion"
    zooAnimals(1) = "turtle"
    zooAnimals(2) = "ostrich"
    Dim turtleIndex As Integer
    turtleIndex = (Array.IndexOf(zooAnimals,"turtle"))
    MsgBox("The turtle is element " & turtleIndex)
End Sub

Однако, в VBS он не работает, WSH не понимает объект Array.
Вопрос: в VBS есть средства поиска данных в массиве или тупо перебором искать?

Спасибо.

2

Re: VBS Работа с массивами

inock пишет:

... в VBS есть средства поиска данных в массиве...

Нет.

inock пишет:

... или тупо перебором искать?..

Если массив невелик, то можно и не перебором. Так, например:

Dim zooAnimals(2), strTemp, x
zooAnimals(0) = "lion"
zooAnimals(1) = "turtle"
zooAnimals(2) = "ostrich"
strTemp = Join(zooAnimals, ";") & ";"
x = InStr(1, strTemp, "ostrich;", vbTextCompare)
If x > 0 Then
    If x = 1 Then
        WScript.Echo x - 1
    Else
        WScript.Echo UBound(Split(Left(strTemp, x - 2), ";")) + 1
    End If
Else
    WScript.Echo "Нет такого элемента"
End If

3

Re: VBS Работа с массивами

Dmitrii пишет:

Если массив невелик, то можно и не перебором.

А если массив приличный?

Там суть-то в чем... Считываются данные (для простоты скажем, номера телефонов из файла). Данные могут повторяться. Если такого номера еще не было - заносим в массив. если уже такой номер есть в массиве - ничего не делаем, считываем следующую строчку.

Вот сижу, соображаю, как это лучше реализовать...

4

Re: VBS Работа с массивами

inock, перебором.

Если есть возможность использовать вместо обычного массива ассоциативный («Scripting.Dictionary») — используйте его. Используйте Recordset. Выбор зависит от того, что Вы делаете в дальнейшем с данными.

5

Re: VBS Работа с массивами

alexii пишет:

Используйте Recordset.

Да, наверное это будет оптимально. Спасибо

6

Re: VBS Работа с массивами

inock
Оптимально работать с коллекциями.