В этой статье на примерах будут рассмотрены массивы в VBScript.
Объявление и инициализация массива
1 2 3 4 5 6 7 8 9 10 11 |
Dim a() ' объявление пустого массива Dim b(3) ' объявление массива размерности 4!. ' Обратите внимание на эту особенность. Элементы массива можно хранить по индексам - 0, 1, 2, 3. В сумме получается 4 элемента. b(0) = 1 b(1) = 15 b(2) = 7 b(3) = 26 Dim c ' Объявляем переменную c = Array("Петя", "Василий", "Артур") ' Производим инициализацию массива |
Многомерные массивы
Приведу пример работы с двумерным массивом. По аналогии можно будет создавать и трёхмерные и т.д. массивы. Максимальный допускаемый размер массива в VBScript — 60-мерный.
1 2 3 4 5 6 7 8 9 |
Dim a(2,1) ' Объявляем двумерный массив ' Заполняем его a(0,0) = 1 a(0,1) = 26 a(1,0) = 5 a(1,1) = 8 a(2,0) = 13 a(2,1) = 465 |
Динамические массивы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Dim a() ' Объявление пустого массива ReDim a(3) ' Изменение его размерности a(0) = 2 a(1) = 3 a(2) = 67 a(3) = 14 ReDim a(2) ' Изменяем размерность массива ещё раз MsgBox(a(2)) ' Выводим элемент массива под индексом 2. Число 67 мы не увидим, так как просто команда ReDim очищает массив. a(0) = 20 a(1) = 55 a(2) = 8 ReDim Preserve a(5) ' Изменяем размерность массива и сохраняем уже имеющиеся данные. В этом помогает параметр Preserve. MsgBox(a(2)) ' Теперь выведется число 8. |
Функции
— LBound() — Возвращает индекс первого элемента массива.
1 2 3 4 5 6 7 |
Dim a(2) a(0) = 1 a(1) = 4 a(2) = 9 MsgBox(LBound(a)) ' Выведет 0 |
— UBound() — Возвращает индекс последнего элемента массива.
1 2 3 4 5 6 7 |
Dim b(2) b(0) = 45 b(1) = 3 b(2) = 56 MsgBox(UBound(b)) ' Выведет 2 |
— Split() — Разбивает строку на подстроки и заполняет ими массив
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Dim c, d, e, f, g c = Split("Строка") MsgBox(UBound(c)) ' Вернёт 0, т.к. в массиве находится 1 элемент - "Строка". Возвращается 0, т.к. это индекс последнего элемента массива. d = Split("Петя,Вася,Коля,Артур", ",") MsgBox(UBound(d)) ' Вернёт 3, т.к. в массиве находится 4 элемента - "Петя", "Вася", "Коля", "Артур". Мы разбили строку разделителем ",". e = Split("Артём,Никита,Алексей,Владислав", ",", 2) MsgBox(UBound(e)) ' Вернёт 1, т.к. теперь в массиве будет содержаться только 2 элемента - "Артём" и "Никита". ' Так произошло, т.к. мы ограничили количество элементов результирующего массива при помощи последнего параметра функции Split. ' По умолчанию данный параметр Count равен -1, что значит что будут возвращены все полученные подстроки. f = Split("КоляZИванzНиколай", "Z", -1, vbBinaryCompare) ' Добавляем последний доступный параметр, который определяет, нужно ли быть чувствительным к регистру. ' В данном случае строка разобъётся только на те подстроки, которые разделяет символ Z, но не z. Чтобы регистр не учитывался необходимо вместо vbBinaryCompare подставить vbTextCompare. MsgBox(UBound(f)) ' Выведет 1, т.к. массив содержит 2 элемента - "Коля" и "ИванzНиколай" g = Split("КоляZИванzНиколай", "Z", -1, vbTextCompare) ' То же самое, но без учёта регистра MsgBox(UBound(g)) ' Выведет 2. Элементы - "Коля", "Иван", "Николай" |
— Join() — Из элементов массива делает строку
1 2 3 4 5 6 7 8 9 10 |
Dim a, b, c a = Array("Коля", "Вася", "Иван") ' Инициализируем массив b = Join(a) ' Преобразуем его в строку MsgBox(b) ' Результат - "Коля Вася Иван" c = Join(a, " - ") ' Преобразуем массив в строку с разделителем " - ". По умолчанию используется пробел (" "), как видно из примера выше. MsgBox(c) ' Результат - "Коля - Вася - Иван" |
— IsArray() — Возвращает True, если переданный объект является массивом
1 2 3 4 5 6 7 8 9 |
Dim x, y x = Array(1, 5, 4) MsgBox(IsArray(x)) ' Вернёт True y = "https://progtask.ru" MsgBox(IsArray(y)) ' Вернёт False |
— Erase() — очищает массив
1 2 3 4 5 6 7 8 |
Dim z z = Array(1, 67, 523) MsgBox(z(1)) ' Выведет 67 Erase z ' Очистка массива z MsgBox(z(1)) ' Выведется ошибка выхода за пределы массива |
— Filter — Отбирает из строкового массива элементы, которые удовлетворяют условию фильтрации и помещает их в массив
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Dim a, b, c, d a = Array("Никита", "Фёдор", "Мефодий") b = Filter(a, "Н") MsgBox(UBound(b)) ' Выведет 0, так как в массиве содержится 1 элемент - "Никита", так как мы делали выборку элементов, содержащих букву "Н" c = Filter(a, "Н", False) ' Добавляем параметр include. По умолчанию равен True. ' При True возвращает совпавшие значения, при False - наоборот. MsgBox(UBound(c)) ' Выведет 1. Значения - "Фёдор", "Мефодий" d = Filter(a, "н", True, vbBinaryCompare) ' Обратите внимание, что сейчас буква "н" маленькая. ' Добавляем параметр compare. Он принимает 2 значения - vbBinaryCompare (учитывать регистр) и vbTextCompare (не учитывать регистр). MsgBox(UBound(d)) ' Вернёт -1, так как строк, которые содержат маленькую букву "н" нет. |
Вопросы задавайте в комментарии.