Урок 9 по VBScript: Массивы

Урок 9 по VBScript: Массивы Программирование на VBSCRIPT

В этой стать мы изучим vbscript массивы и функции для работы с ними. Массивы языка vbscript могут быть как одномерными, так и многомерными, нумерация элементов массива начинается с нуля. Если не прибегать к дополнительным функциям, то объявление массива в языке vbscript подобно объявлению переменной, только после имени переменной следуют круглые скобки. Если в круглых скобках ничего нет, то массив является динамическим – его длину можно изменять.

Вот простые примеры:

dim my_arr(10)            '11 элементовdim my_matrix(3,4)        ' матрица размером 4 (строки) на 5 (столбцов)dim my_dyn()               'динамический

Присвоение значений производится через индекс:

my_arr(0) = 100my_arr(1) = "строка"my_arr(2) = #10/05/2000# my_matrix(0,0) = 25my_matrix(0,1) = 250my_matrix(2,3) = 2.5

Если мы объявили динамический массив vbscript, то для подальшего определения его размера служит ключевое слово ReDim:

ReDim my_dyn(50)

Вы вправе менять размерность неограниченное количество раз. Что бы произвести сохранение уже имеющейся информации используется ключевое слово Preserve:

ReDimPreserve my_dyn(80)

Что бы полностью очистить содержимое, применяется команда Erase:

Erase my_matrix

Но как вы уже заметили, приведенный выше подход не совсем практичен, особенно, в плане назначения значений, поэтому, давайте рассмотрим функции для работы с массивами языка vbscript.

Array(arglist) – В качестве параметра arglist передаются аргументы массива, которые разделены между собой запятыми, например:

'*****************************************' vbscript массивы' array_1.vbs'*****************************************OptionExplicit dim new_arr(4), i, sdim my_arr, index, list new_arr(0) = 0new_arr(1) = "строка"new_arr(2) = 33.5new_arr(3) = 100new_arr(4) = #10/05/2000# foreach i in new_arr     s = s & i & vbCrLf next MsgBox s my_arr = Array(0,"строка",33.5,100,#10/05/2000#)foreach index in my_arr     list = list & index & vbCrLf next MsgBox list

В данном примере мы создали два vbscript массива: new_arr – обычным способом и my_arr – с помощью функции Array, второй подход более эффективен, так как экономит строки кода.

Скачать архив с примерами

IsArray(varname) – Данная функция позволяет определить, является ли переменная  varname массивом, если да, то функция вернет true, и false в противном случае.

UBound (имяМассива [, измерение]) — Позволяет определить верхнюю границу массива (имяМассива), параметр [,измерение] не является обязательным, он актуален в том случае, если происходит работа с многомерными. Параметры [,измерение] принимает целые значения, начиная от 1, по умолчанию параметр [, измерение] равен 1. Пример:

'*****************************************' vbscript массивы' функция UBound' UBound.vbs'*****************************************OptionExplicit dim matrix(2,3)dim a, bmatrix(0,0) = 2matrix(0,1) = 4matrix(0,2) = 5 matrix(1,0) = 4matrix(1,1) = 5matrix(1,2) = 99matrix(1,3) = 6 a = UBound(matrix,1)b = UBound(matrix, 2) MsgBox aMsgBox b MsgBox matrix(1,2)

LBound(arrayname[, dimension]) – Аналог предыдущей функции, но выводит нижнюю границу.

Хорошо, теперь давайте рассмотри более серьезные виды массивов языка vbscript.

Массив массивов – такого вида конструкция может привести новичка в заблуждение, и он подумает, что перед ним двумерный, хотя это ошибка, смотрим на пример:

'*****************************************' vbscript массивы' array_2.vbs'*****************************************OptionExplicit dim new_arr, s, i,jdim a, b s="" ' Это не двумерный!!!new_arr = Array(Array(2,4,5), Array(8,5,99,6)) for i=0 to 2     s=s & " " & new_arr(0)(i)nexts=s & vbCrlffor j=0 to 3     s=s & " " & new_arr(1)(j)nextMsgBox s

В данном примере vbscript массив new_arr является одномерным и состоит из двух значений, при чем, каждое значение является также одномерным массивом. Видим, что в предыдущем примере мы использовали синтаксис вида: matrix(1,2), а тут — new_arr(1)(j). Различие, как говорится – на лицо.

Функция в качестве значения. Может возникнуть ситуация, когда надо сохранить не просто значение, а функцию, вот тут то и происходит головная боль. Давайте взглянем на следующий пример:

'*****************************************' vbscript массивы' вызов функции' array_3.vbs'***************************************** dim new_arr(4), i, s function new_fun(x,y)    new_fun=x+yendfunction function new_fun_1(x,y)    new_fun_1=x+yendfunction new_arr(0) = 0new_arr(1) = "строка" 'Создаем ссылку на функциюset new_arr(2) = getref("new_fun"' Так делать неправильноnew_arr(3) = new_fun_1(x,y)new_arr(4) = #10/05/2000# MsgBox new_arr(2)(10,5)' Ошибка!!!MsgBox new_arr1(2)(10,5)

В данном примере мы объявили две функции, мы попробовали определить их в качестве параметра массива. В первом случае (new_fun_1) мы просто присвоили имя функции:

new_arr(3) = new_fun_1(x,y)

Вторую функцию (new_fun) мы присвоили с помощью ключевого слова set и функции getref().

Создание сложного vbscript массива

Попытка вызвать первую функцию приводит к ошибке, вторая – прекрасно вызывается с передачей ей параметров. Давайте разберёмся, в чем причина. В первом случае индекс массива vbscript содержит функцию, как значение – без параметров, оно равно 0, поэтому мы не может её вызвать. Во втором случае мы создали ссылку (set) на нужную функцию, сама ссылка получена за счёт функции getref().

Ладно, думаю, изучение vbscript массивов на этом можно закончить.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий