Массивы
предназначены для объединения множества однотипных переменных. Доступ
к переменных массива осуществляется через индекс (номер в
массиве). Массив объявляется с помощью оператора
Dim.
Dim
Array.l(
10 )
Вот так объявляется массив, состоящий из 11 переменных типа
Long и
имеющий имя
Array. У вас может
появится вопрос, почему 11 переменных, а
не десять как задано в скобках? Дело в том, что нумерация начинается с
нуля и поэтому получается что на самом деле в массиве на одну
переменную больше чем задано.
Для доступа к переменной массива, нужно в скобках указать её индекс
(номер) и прочитать либо записать информацию.
Dim
Array.l(10)
;
Создание массива
Array(2)=100
;
Запись в массив
x=Array(2)
;
Чтение из массива
Debug
x ;
Отображаем число из переменной "x" в отладочном окне
В этом примере создаётся массив с именем
Array,
а затем в переменную с номером 2, записывается число 100. После чего
производится чтение из этой же переменной. Результат помещается в
переменную с именем
Х.
В полной мере ощутить приемущество массива перед отдельными переменными
можно в циклах, когда нужно при каждом выполнении кода получать доступ
к требуемой переменной.
Dim
Array.l(100)
For
i=1 To
100
Array(i)=i
Next
i
В этом примере создаётся массив с 101 переменной типа
Long, а затем в цикле в этот массив
записываются данные, в нашем случае число из переменной
i
Выше переведены примеры одномерных
массивов, но при необходимости можно использовать многомерный массив.
Для этого, при объявлении нужно задать размерность много мерного
массива.
Например в этом примере создаётся 3-ёх мерный массив
Dim Array.l(10, 4, 8) ; Создание 3-ёх мерного массива
Array(2, 1, 1)=100 ; Запись в массив
x=Array(2, 1, 1) ; Чтение из массива
Debug x ; Отображаем число из переменной "x"
в отладочном окне
При необходимости, можно изменить размерность массива (количество
переменных в массиве) после того как массив был создан. Это выполняется
с помощью оператора ReDim.
Dim Array.l(10) ; Создание массива
; Здесь находится код программы
; Вдруг выяснилось что 11 переменных
это мало, надо как минимум 21
ReDim Array(20) ; Было 11 переменных в массиве, а
стало 21.
Структуры
В отличие от массива,
переменные в структуре могут иметь разный
тип.
Вот пример создания структуры
Structure
Proba
x.l
y.l
Text.s
EndStructure
Операторы Structure
и EndStructure
определяют начало и конец структуры. Между ними расположены переменные
структуры Первые две переменные имеют тип Long, а последняя, тип
String.
Структуре
присвоено имя Proba которое
будет использоваться при её объявлении.
Следующий
пример содержит работу со структурой
Structure
Proba
x.l
y.l
Text.s
EndStructure
test.Proba ; Объявление структуры
; Запись в структуру
test\x=10
test\y=20
test\Text="Строка текста"
; Чтение из структуры и
отображение данных в отладочном окне
Debug test\x
Debug test\y
Debug test\Text
В структурах допускаются вызовы других структур и статические (размер
которых после объявления нельзя изменить) массивы переменных. Учтите, в
структуре индексация массива начинается с нуля и чило элементов равно
заданному. Другими словами если задан массив, равный 100, то к
нему можно обращаться по индексам 0...99
Structure
Proba
x.l[100] ; Массив
переменных
z.POINT ; Объявление системной структуры с
именем POINT
EndStructure
text.Proba ; Объявление структуры
; Запись в структуру
For i= 0 To 99
text\x[i]=i
Next i
text\z\x=1
text\z\y=2
; Чтение из структуры и отображение
данных в отладочном окне
Debug "Чтение из массива"
For i= 0 To 99
Debug text\x[i]
Next i
Debug ""
Debug "Чтение из вложенной структуры POINT"
Debug text\z\x
Debug text\z\y
Кроме того, есть возможность добавить структуру в обычному массиву. Для
этого в место типа переменных массива указываем имя структуры.
Structure
Proba
x.l
y.l
Text.s
EndStructure
; Создание массива с прикреплённой к
нему структурой
Dim Array.Proba(2)
; Запись в структуру массива
Array(1)\x=1
Array(1)\y=2
Array(1)\Text="Текст"
; Чтение из структуры массива и
отображение данных в отладочном окне
Debug Array(1)\x
Debug Array(1)\y
Debug Array(1)\Text
Динамически связанные
списки
В динамически связанных списках в
отличие от массивов, за переменными чётко не закреплены определённые
индексы (номера, позиции). Кроме того, есть механизм, позволяющий
раздвигать переменные и вклинивать тода одну или несколько переменных
или наоборот, уничтожать несколько переменных, сдвинув остальные
переменные. Всё это позволяет динамически изменять данные в списке.
Список создаётся с помощью оператора NewList.
Созданный список пока пустой, т. е. не содержащий элементов. Элементы
добавляются с помощью функции AddElement.
Созданный элемент становится текущим и именно с ним будет происходить
работа. Если нужно обратится к определенному элементу, то его сначала
нужно сделать текущим с помощью функции SelectElement.
Получить номер текущего элемента можно с помощью функции ListIndex.
Для того чтобы просмотреть содержимое всего списка, можно использовать
специальный цикл, расчитанный только для работы со связанными списками.
Этот цикл организуется с помощью операторов ForEach и Next.
NewList MyList.l() ; Создание списка
AddElement(MyList()) ; Добавляем элемент
MyList()=1
AddElement(MyList()) ; Добавляем элемент
MyList()=2
AddElement(MyList()) ; Добавляем элемент
MyList()=3
AddElement(MyList()) ; Добавляем элемент
MyList()=4
; В цикле просматриваем содержимое
списка
ForEach MyList()
Debug MyList()
Next
В этом примере, в список добавляется
четыре элемента. Как только элемент добавлен, он становится текущим, с
которым на данный момент можно работать. В цикле ForEach и Next
происходит последовательная астивация всех элементов, т. е. элементы
последовательно начиная с нулевого, становятся активными.
В место тпа переменных списка, можно указать имя существующей структуры
и тогда каждый элемент списка будет содержать до такой структуре.
Structure
Proba
x.l
y.l
Text.s
EndStructure
NewList MyList.Proba() ; Создание списка
AddElement(MyList()) ; Добавляем элемент
; Запись в структуру нулевого
элемента списка
MyList()\x=1
MyList()\y=2
MyList()\Text="Текст"
; Чтение из структуры нулевого
элемента списка и отображение данных в отладочном окне
Debug MyList()\x
Debug MyList()\y
Debug MyList()\Text