Массивы и коллекции в visual basic net


Содержание

Урок № 10. Массивы, записи и перечисления

На предыдущем уроке мы рассмотрели с вами такую важную вещь, как переменные. А переменные — это ведь кусочки памяти, где хранятся данные. Значит, если эффективно использовать переменные — мы эффективно используем память. А если мы эффективно используем память — то памяти для приложения нужно меньше и приложение работает быстрее. Так вот для того, чтобы эти данные использовать с максимальной эффективностью, и в то же время с лёгкостью, были придуманы «массивы» (Arrays), «записи» (Types) и «перечисления» (Enums).

Их ещё называют списками. Итак что же такое массивы? Массив (вектор) — это набор однотипных переменных, объединенных одним именем и доступных через это имя и порядковый номер переменной в наборе. Количество элементов массива теоретически может быть бесконечным, ограничения накладываются конкретными языком программирования и операционной системой. Элементы массива обладают непрерывной нумерацией определённого диапазона.

В программировании массивы используются довольно часто. Например, вам нужно загрузить в программу содержимое какого-нибудь файла. Если этот файл строковый, то можно использовать строку и обойтись без массива. А вот если файл бинарный (двоичный), то тут без массива просто не обойтись!

В Visual Basic массивы определяются следующим образом:

Dim myArray (10) As Long

Как вы могли заметить, определение массива отличается от определения обычной переменной только индексом, указанным в скобках. Этот индекс указывает размерность массива. В данной случае массив myArray будет содержать 11 элементов. Почему 11? Потому что нижняя граница массива начинается с нуля. [0,1,2. 9,10]. Чтобы задать определённую размерность можно использовать зарезервированное слово To:

Dim myArray (5 To 10) As Long

Здесь определяется массив, размерность которого 6 элементов (5,6,7,8,9,10).

Общий синтаксис определения массива следующий:

Dim ИмяМассива <НомПерв1 То НомПосл1, НомПерв2
То НомПосл2, . ) [ As [ New ] ИмяТипа]

Массивы можно делать многомерными. Например, объявим массив — таблицу поля шахматной доски:

Dim chessTable (1 To 8, 1 To 8) As String

Этот массив представляет собой таблицу с восьми ячейками по вертикали и горизонтали.

Итак, массив определён. Теперь необходимо узнать — как же можно добраться к элементам этого массива. Очень просто! К элементам массива нужно обращаться по индексу, к примеру, чтобы изменить нулевой элемент массива myArray нужно написать:

chessTable (2,3) = «Пешка»

Массивы переменной размерности (динамические)

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

Dim fileContent (119) As Byte

Но это если файл имеет длину 120 байт. А что делать, если мы не знаем длину загружаемого файла? Определять очень большой массив, чтобы уж наверняка туда мог поместиться большой файл? Нет. Так делать нельзя. Вот здесь как раз и нужно использовать динамический массив.

Visual Basic предоставляет довольно мощные средства для работы с такими массивами. Опеределяется такой массив следующим образом:

Dim myArray () As Byte

В отличие от массивов статичных размеров, когда обращаться к элементам можно сразу после его объявления, к элементам динамического массива сразу обращаться нельзя, т.к. они ещё не инициализированы. Для начала нужно указать его новую размерность. Для это в VB есть оператор ReDim. Работает он следующим образом:

ReDim myArray (4)

Теперь массив myArray имеет одну размерность с индексами от 0 до 4 (т.е. всего 5 элементов). Теперь к такому массиву можно обращаться точно так же, как и к статичному. Если в дальнейшем возникнет необходимость снова изменить размерность массива, можно ещё раз использовать ReDim.

Но! Здесь есть подводный камень! Давайте рассмотрим маленький примерчик:

Dim myLong As Long
Dim myArray() As Long ‘ объявляем массив

ReDim myArray (2) ‘ одна размерность [0,1,2]
myArray (1) = 234 ‘ присваиваем второму элементу чило 234
myLong = myArray (1) ‘ сохраняем его в переменной myLong

ReDim myArray (3) ‘ снова меняем размерность-теперь [0,1,2,3]
myLong = myArray (1) ‘ снова пытаемся сохранить второй элемент

На последней строке, переменной myLong присвоится 0 вместо 234! Это происходит потому, что оператор ReDim заново инициализирует (сбрасывает) все элементы массива к значению по умолчанию (как помните, для чисел — это 0, для строк «»). Но как же быть, если мы хотим изменить размеры массива, сохранив все старые элементы? Для этого нужно после оператора ReDim поставить слово Preserve. Примерно так:

ReDim Preserve myArray (3) ‘ сохраняем старые элементы
myLong = myArray (1) ‘ всё в порядке

Теперь всё в порядке.

Полезные советы по работе с массивами в VB

Массивы могут храниться в переменных типа Variant. Иногда это бывает удобным. В некоторых случаях без этого просто не обойтись! (Например, когда вы хотите, чтобы ваша функция возвращала массив). Чтобы сохранить какой-либо массив в переменной типа Variant необходимо просто присвоить этой переменной нужный массив:

Dim myVariantArray ‘ переменная Variant по умолчанию
myVarianrArray = chessTable

Обратите внимание, никакие индексы указывать не нужно!

Теперь можно использовать копию как обычный массив:

myVarianrArray (0) = «Это копия»

Если вам потребуется в коде программы узнать текущие размеры массива, то можно использовать встроенные функции Visual Basic — LBound и UBound. Первая функция возвращает нижнюю границу массива, вторая верхнюю. Подробнее об этих функциях читайте в справочнике (vbhelprus).

Те, кто программировал на других языках программирования (таких, как C и Pascal), наверняка сталкивались с понятием структура (C), и записью (Record в паскале). В Visual Basic аналогом структуры является запись. Запись — это новый, опеределяемый программистом тип данных, который состоит из одной и более переменных внутри. Давайте рассмотрим это на примере. Например, необходимо в программе хранить массив студентов. Причём каждый студент имеет свои характеристики: ФИО, Возраст, Ниличие Грамот. Конечно, для хранения таких данных можно использовать, например, массив, имеющий две размерности. Но это не лучший вариант. Лучше всего здесь подходят Записи! Затем из записи можно будет сделать массив! Чтобы определить запись в программе нужно использовать зарезервированное слово Type. Заканчивается запись словами End Type:

Private Type Student ‘ вместо Private могло быть и Public
&nbsp&nbsp&nbsp&nbspFIO As String
&nbsp&nbsp&nbsp&nbspAge As Byte
&nbsp&nbsp&nbsp&nbspHasGramot As Boolean
End Type

Заметьте, что Dim перед именем переменной указывать не нужно. Итак, мы определили запись в программе. Теперь можно объявлять переменные, имеющий тип — Student (т.е. наша новая запись). Например:

Dim newStud As Student

Слово Student синим выделяться не будет, т.к. синию подсветку имеют только зарезервированные слова, встоенные в Visual Basic

Теперь, к полям записи можно обращаться при помощи точки:

newStud.FIO = «Василий Васильевич Пупкин»
newStud.Age = 19
newStud.HasGramot = False

Всё как в паскале. (ну, и почти как в С).

Visual Basic предоставляет возможность не указывать каждый раз имя переменной типа запись, при обращении к её элементам. Это особенно полезно, когда запись имеет много внутренних членов. Для этого есть слово With:

With newStud
&nbsp&nbsp&nbsp&nbsp.FIO = «Бабай Бабаевич Бабаев»
&nbsp&nbsp&nbsp&nbsp.Age = 20
&nbsp&nbsp&nbsp&nbsp.HasGramot = True
End With

Настало время объявить массив элементов типа запись (точнее типа Student):

Dim myStudArray (20) As Student

Здесь мы объявили массив из 21 студента. Теперь можно обращаться к элементам массива точно так же, как мы это делали раньше:

myStudArray(0).FIO = «Билл Гейтс Пупкинович»

Как видите всё гениальное просто! Особенно в Visual Basic! :)

Перечисления тоже довольно важная и нужная штука. В принципе, вы с ними уже встречались. Где? А вспомните, что происходило, когда вы напротив Boolean переменной ставили знак равенства? Правильно, Visual Basic выдавал вам список из двух значений на выбор — True и False. Это и есть перечисление. Другими словами перечисление — это список констант. Перед использованием такого списка его необходимо определить в программе. Например, рассмотрим перечисление оценок, получаямых студентами:

Enum Ocenka
&nbsp&nbsp&nbsp&nbspNeud = 3
&nbsp&nbsp&nbsp&nbspHorosho = 4
&nbsp&nbsp&nbsp&nbspOtlichno = 5
End Enum

Присваивать значения константам внутри Enum не обязательно. Если этого не сделать, то константы будут принимать значения 0,1,2. и т.д.

Теперь можно объявить переменную типа Ocenka:

Dim oc1 As Ocenka

И, если вы теперь попытаетесь присвоить такой переменной значение — Visual Basic выдаст список (Neud, Horosho и Otlichno) из которого вы сможете выбрать нужное значение. Также эти константы можно использовать, например, при проверке условий, т.е. If oc1 = Horosho Then . Но об условиях позже.

Чтобы закрепить полученные знания, давайте переопределим нашу запись Student на вот какую:

Private Type Student ‘ вместо Private могло быть и Public
&nbsp&nbsp&nbsp&nbspFIO As String
&nbsp&nbsp&nbsp&nbspAge As Byte
&nbsp&nbsp&nbsp&nbspHasGramot As Boolean
&nbsp&nbsp&nbsp&nbsp ikzamenFizika As Ocenka
&nbsp&nbsp&nbsp&nbsp ikzamenMatan As Ocenka
End Type

Теперь чтобы присвоить оценку 5 по матанализу студента под номером 3, необходимо написать:

Теперь, как видите, код очень прозрачен. Такой код гораздо легче для понимания, поэтому прежде чем определять какие-либо данные в своей программе, сначала подумайте, как это лучше реализовать? Может лучше что-то сделать с помощью записей? Или перечислений? И т.д.

Примечание: Те, кто программировал на паскале помнят про множества. Так вот, могу их огорчить, множеств в Visual Basic нет. Но в принципе, никто не мешает вам реализовать их самостоятельно, написав соответствующие функции.

Ну вот и всё. На этом закончим с массивами, записями и перечислениями. Пора переходить к более практичному — выражениям!

Массивы и коллекции в visual basic net

Массивы очень упрощают процесс программирования. Без них практически невозможно написать универсальную программу. Например, представьте себе, что вы манипулируете информацией о квартирах жилого дома. Вы объявляете переменные K1 — для первой квартиры, K2 — для второй и так далее. K1=54 будет означать, что площадь первой квартиры 54 кв.м., К2=72 и т.д. Теперь представим, что нам надо подсчитать общую площадь всех квартир в доме. Очевидно, что это что-то типа Total_S = K1+K2+. +Kn. В одном доме у нас 36 квартир, а в другом 144. Представляете бредовость процесса подобного программирования? Если в первом случае я должен буду использовать 36 отдельных переменных для вычисления общей площади, то для второго дома уже 144. Очень быстро вы придёте к мысли, что вам нужна переменная, состоящая из нумерованных ячеек. Тогда обретают смысл все те операторы циклов, входящие в состав любого языка программирования. Но об этом чуть позже.

Что такое массив

Массив — переменная, состоящая из некоторого количества однотипных элементов. У массива, как и у любой другой переменной, есть имя. А доступ к конкретному элементу массива осуществляется через указание в скобках после имени его индекса. Например, A(5) означает, что я обращаюсь к элементу с индексом 5 массива, имеющего имя A.

Типы массивов

Массивы в VBA и во многих других языках программирования делятся на 2 класса:

Фиксированные массивы . Такие массивы состоят из заранее известного количества элементов. Это количество определяется во время объявления массива и уже не может быть изменено в процессе его жизненного цикла. Вы, конечно же, сможете использовать меньшее количество элементов, но не существует способа увеличить количество элементов сверх объявленного.

Динамические массивы . Эти массивы можно «переобъявлять» в процессе жизненного цикла. То есть мы можем управлять количеством элементов динамических масивов в зависимости от наших потребностей. Это очень удобно, так как в подавляющем большинстве случаев программист не может заранее знать, с каким объёмом данных он столкнётся. Если вы собираетесь писать более-менее универсальные программы, то этот тип массивов определенно стоит изучить.

Объявление массивов


Объявление фиксированных массивов

Рекомендация : при объявлении массивов VBA я советую вам давать всем именам префикс » arr «. Я сторонник венгерской нотации.

Как мы видим, тут объявлено 2 одномерных массива arrTemp и arrTest . Одномерные массивы в программировании также часто называют векторами . Типом элементов первого массива является Long , второго массива — String . В этом типе синтаксиса в скобках указан максимальный индекс ( верхняя граница ) элемента массива. А что насчёт минимального индекса ( нижней границы ) массива? По-умолчанию минимальным индексом является ноль. В данном случае стандартное поведение интерпретатора языка VBA можно изменить при помощи оператора option base <0|1>. Option base 1 заставляет VBA считать нижней границей массива — единицу, а не ноль.

Таким образом, по-умолчанию массив arrTemp имеет 11 элементов — от 0 до 10. Но, если в начало модуля, в котором этот массив объявляется, вставить оператор Option Base 1 , то массив arrTemp будет иметь 10 элементов — от 1 до 10.

Помимо вышеуказанного вы вправе использовать следующий синтаксис, который НЕ зависит от option base <0|1>:

таким образом вы в явном виде указываете и нижнюю, и верхнюю границы. Как видите, нижняя граница совершенно не обязательно должна начинаться с 0 или 1. Более того, индексы границ могут принимать и отрицательные значения, главное чтобы нижняя была меньше верхней.

Помимо одномерных массивов, можно объявлять и массивы с размерностью больше единицы.

arrMulti — двумерный массив, а arrData3 — трёхмерный. Первый содержит 11*31=341 элемент, второй — 2*3*10=60 элементов. Теоретически допускается объявлять до 60 размерностей массива.

Какие типы данных могут стать элементами массива? Тут всё, как в шутке про фамилию еврея, — абсолютно любой тип данных годится на роль элемента массива, включая объектные типы, User Data Type , другие массивы (через тип Variant ). Если вы не указываете при объявлении тип данных массива, то предполагается, что этим типом является тип Variant .

Объявление динамических массивов

Динамические массивы объявляться так:

Однако, использовать их после такого объявления пока ещё нельзя. Необходимо выделить память под массив. Особенность работы с динамическим массивом как раз состоит в том, что программист отвечает за его своевременное расширение (усечение) в памяти. Для этого существует специальный оператор, который имеет следующий синтаксис:

ReDim [Preserve] varname(subscripts) [As Type]

После этого оператора, вы можете использовать элементы массива arrOpen с 0-го по 5-й. Всё, что мы говорили про оператор option base и нижнюю границу, верно и для динамических массивов. Предположим, что вы сохранили информацию в элементах 0-5 и у вас поспела новая порция информации для элементов 6-11. Чтобы разместить в данном массиве новые элементы и не потерять старые, вы должны сделать следующее:

то есть мы тут увеличиваем верхнюю границу массива и используем ключевое слово Preserve , чтобы во время этой операции не потерять текущее содержимое arrOpen , так как в противном случае (без слова Preserve ) массив будет расширен, а память заполнена нулями. Вы также вправе вообще не декларировать массив оператором Dim , а сделать это впервые через ReDim и там же указать лип элементов. Но, если вы в первом ReDim (или Dim ) указали определенный тип элементов, то в последующих операторах ReDim этот тип переопределён быть не может — возникнет ошибка на этапе компиляции проекта.

Изменение элементов массива

Пора бы нам уже научиться пользоваться нашими массивами — то есть записывать информацию в их элементы и считывать её оттуда. Это довольно просто:

Как и с обычными переменными запись информации в элемент массива происходит через оператор присваивания (=), но указанием индекса элемента массива.

Чтение элементов массива

Определение границ массива

В подпрограммах часто приходится иметь дело с массивами, которые переданы вам в качестве параметра (как это сделать показано ниже), поэтому в этом случае очень актуален вопрос определения нижней и верхней границ индекса массива. Для этого в языке предусмотрены 2 функции: LBound и UBound . Первая возвращает нижнюю границу индекса, вторая — верхнюю.

LBound( array [, dimension])

UBound( array [, dimension])

Для одномерных массивов параметр dimension можно не указывать. Для многомерных массивов его указывать необходимо. Кстати, это означает, что, если вы точно не знаете, с каким массивом имеете дело, но необходимо узнать его первую размерность, то лучше использовать вариант UBound(arrTemp,1) , а не UBound(arrTemp) , так как последний вариант вызовет ошибку, если массив окажется многомерным.

Если вы ошибётесь с указанием правильного индекса массива, то возникнет ошибка периода исполнения с кодом 9. Эта же ошибка возникнет, если вы в функции LBound / UBound укажете несуществующую размерность массива (например, 3 для двумерного массива).

Перебор элементов массива

Собственно массивы нужны для того, чтобы хранить в них однотипную информацию и перебирать их в цикле. Как правило, алгоритм делает что-то полезное с одним элементом массива, а цикл повторяет эти типовые действия для всех элементов массива.

Наиболее удобный оператор цикла для перебора элементов массива — это безусловно For . Next .

так же есть способ не заботиться об определении нижней и верхней границ, если алгоритм не требует от нас знания текущего индекса массива:

Вы, конечно, можете перебирать массив и в других типах циклов Do . Loop , но, право, смысла и удобства в этом не много. По крайней мере я не сталкивался, кажется, с ситуациями, когда для перебора массива цикл For не подошёл.

Передача массивов в подпрограммы

Массивы удобнее всего передавать в подпрограммы в виде параметра типа Variant .

Обратите внимание, что функции GetResult в качестве параметра передаются массивы. При чём, в первом случае это массив с типом элементов Long , а во втором — String . За счёт того, что внутри функции используются переменные типа Variant , то сначала функция нам возвращает сумму элементов массива arrIntegers , а во втором результат сложения (конкатенации) строк массива arrStrings . Кроме того, параметр parArray не описан как массив ( parArray As Variant ), но мы внутри функции GetResult ведём себя с ним, как с массивом ( For Each Element In parArray )! Это возможно, так как переменные типа Variant умеют определять, что им присваивается и вести себя далее в соответствии с тем, что они содержат. Если переменной parArray присвоили массив (через вызов функции — строки 17 и 18), то она себя будет вести как массив.

Массив с элементами типа массив

Продемонстрируем, как можно хранить в качестве элементов массива другие массивы.

Результат отладочной печати:

Функция Array

Данная функция полезна для создания справочных массивов. Она возвращает переменную типа Variant , содержащую одномерный массив с типом элементов Variant .

Array( arglist )

Вызов функции без параметров приведёт к возврату массива нулевой длинны. При этом будет наблюдаться интересный эффект LBound вернёт вам 0, а UBound вернёт -1, то есть верхняя граница окажется меньше нижней границы.

Функция Split

Split возвращает одномерный массив, содержащий подстроки, из строкового выражении с учётом указанного разделителя

Split(expression[, delimiter[, limit[, compare]]])

expression — строковое выражение, содержащая подстроки и разделители. Обязательный параметр.

delimiter — текстовый разделитель. Необязательный параметр. Если опущен, то предполагается, что разделителем является символ пробела.

limit — количество подстрок, которое необходимо вернуть. -1 или отсутствие параметра означает, что вернуть надо все подстроки.

compare — константа, указывающая тип сравнения для символов разделителей. 1 — текстовое сравнение (без учёта регистра), 0 — бинарное сравнение (с учётом регистра).

Результат выглядит так:

Если вы в качестве разделителя укажете пустую строку, то на выходе получите массив, состоящий из одного элемента. Кстати, split всегда возвращает массив с нулевой нижней границей вне всякой зависимости от наличия option base 1 .

Нюансы работы с динамическими массивами

Неинициализированный массив

У динамического массива есть такое промежуточное состояние, когда он уже объявлен, но ещё не содержит никаких элементов.

То есть у переменной динамического массива есть такое состояние, когда мы не можем воспользоваться вспомогательными функциями LBound / UBound для определения его (массива) статуса. Это особенно надо учитывать, когда вы пишите подпрограммы, работающие с массивами. Прежде чем работать (перебирать) массив необходимо убедиться, что он проинициализирован, в противном случае программа вылетит с ошибкой 9.

Для этого я предлагаю пользоваться функцией подобной нижеописанной IsNotEmptyArray :

Расширение массива

Как правило, расширять динамический массив приходится в цикле. Возможны 2 стратегии: расширение на 1 элемент, как только в этом есть необходимость (назовём это эластичным расширением), и расширение авансом, когда вы увеличиваете верхнюю границу скачками, скажем сразу на 100 элементов. Реализовав оба варианта, я для себя сделал вывод, что авансовое расширение получилось и компактнее, и работает быстрее, так как операция расширения, вообще говоря, затратна и, чем реже вызывается, тем лучше.

Авансовый метод вышел даже компактнее

Удаление массива

Существует оператор Erase , который полностью освобождает память из-под динамического массива. Будучи вызванным для статического массива он его обнуляет, а если он строковый, то элементам присваивается пустые строки.

Получение массива на основе диапазона Excel

Самый эффективный по скорости способ получить содержимое диапазона Excel для манипулирования в VBA — это скопировать его в массив с элементами Variant. Делается так:

Даже, если вы передаёте в массив столбец или строку, получаемый массив всегда будет иметь 2 измерения. Измерение 1 отвечает за строки, измерение 2 — за столбцы. То есть ячейка C5 будет в элементе arrTemp(5,3) . Нижняя граница таких массивов всегда будет начинаться с единицы.

Дополнительные источники

В качестве источника дополнительной информации по массивам я могу порекомендовать замечательный, исчерпывающий ресурс Чарльза Пирсона (Charles H. Pearson). Его сайт следует штудировать всем, кто серьёзно осваивает VBA. Конкретно по массивам там огромное количество готовых подпрограмм для работы с ними, исходные коды, снабженные подробнейшими комментариями, продвинутые объяснения для копающих в глубину. Без преувеличения великолепный ресурс!

Массивы в VB

Массивы в Vb

На этом уроке мы узнаем, как объявлять и заполнять массивы в visual basic net
Массивы используются в математических расчетах, компьютерной графике.
Массив – это набор элементов с общим именем. К элементу массива можно обратиться по его индексу (значение первого элемента имеет индекс 0, второго 1 и т.д.). Задается массив в Vb следующим образом
Dim имя массива () As тип элемента
Чтобы присвоить значение элементу массива в vb,необходимо указать имя массива и в скобках индекс номер элемента массива
имя массива (номер элемента) = значение.

Илон Маск рекомендует:  Что такое код asp deletebackup

Например, a (1) = 100 присвоит элементу массива a с номером 1 значение 100
Существуют различные способы заполнения массивов в vb.net
Заполнение массива случайными числами
Заполнение массива при объявлении
Заполнение массива с клавиатуры с помощью диалогового окна
Заполнение массива из файла

Заполнение массива в Vb случайными числами

Мы задаем массив произвольным образом (случайные целые числа) и выведем массив на экран в элемент Listbox

Размещаем в форме элементы Listbox и Button. Чтобы задать случайные числа в Vb, необходимо в начале программы создать объект, отвечающий за случайные числа.
Dim random As New Random()
Чтобы получить случайное значение в диапазоне от min до max, используется функция
random.Next(min, max)
Чтобы присвоить всем элементам массива значения и вывести их в элемент ListBox, используется цикл For. В этом цикле граница цикла совпадает с размерностью массива (числом элементов в массиве). Переменная цикла используется при обращении к элементам массива.
For i = 1 To 10 Step 1
a(i) = random.Next(1, 1000)
ListBox1.Items.Add(i & vbTab & a(i))
Next i
Полная версия программы в Vb для заполнение массива случайнйми числами:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a(100) As Integer ‘задаем целочисленный массив
Dim i As Integer ‘переменная для цикла
Dim random As New Random() ‘задаем объект случайных чисел
‘пробегаемся по всему массиву
For i = 1 To 10 Step 1
a(i) = random.Next(1, 1000) ‘присваиваем элементу массива с номером i случайное число в диапазоне от 1 до 1000
ListBox1.Items.Add(i & vbTab & a(i)) ‘выводим в Listbox номер массива и значение массива
Next i
End Sub
End Class

Заполнение массива в vb при объявлении
Массив в Vb можно ввести прямо при его объявлении. Для этого необходимо при объявлении массива не указывать его размер, а просто оставить пустые скобки, и далее после равно в фигурных скобках ввести значения элементов массива через запятую.
Public Class Form1
Dim matr() As Integer = <2, 2, 4, 4>
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j As Integer
For i = 0 To 3
ListBox1.Items.Add(matr(i))
Next
End Sub
End Class

Заполнение массива с помощью клавиатуры, с помощью элемента InputBox
Значение элементов массива можно задать с помощью диалогового окна Inputbox. Чтобы вызвать диалоговое окно и присвоить переменной введеное с его помощью значение , необходимо использовать конструкцию

Перменная=InputBox(“Сообщение”, “название окна”)


matr (i)=InputBox(«Введите пожалуйста (» + Str(i + 1) + ”) элемент массива»,»Заполнение массива»)

Функция Str(числовое значение) в vb преобразует числовое значение в текстовое выражение для последующего вывода в диалоговом меню

Пример программы на visual basic для ввода массива с клавиатуры
Public Class Form1
Dim matr(3) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j As Integer
For i = 0 To 3
matr(i) = InputBox(«Введите (» + Str(i + 1) + «) элемент массива», «Заполнение массива»)
ListBox1.Items.Add(matr(i))
Next
End Sub
End Class

Заполнение массива vb из файла

Основы VB.NET. Уроки с сайта http://progs.biz

Основы VB.NET. Урок 19. Массивы в VB.NET

Массив — это некоторый набор переменных с одним именем. Элементы этого набора различаются по номерам. Массив удобно использовать для работы с некоторыми однотипными переменными — например, если вы измеряете температуру у некоторого объекта каждый час в течении некоторго времени, то такие измерения удобнее хранить именно в массиве. Обращение к конкретным элементам массива происходит по номеру элемента (или по номерам — их может быть несколько).

Вот так массив объявляется:

Элементы массива A — это A(0), A(1), A(2) и A(3), массива B — B(0, 0), B(0, 1), B(1, 0) и B(1, 1). Обращение к элементам массива происходит как и обычным переменным:

Обратите внимание, что в VB.NET нумерация элеметов массива начинается с нуля (в отличие от предыдущих версий Visual Basic).

Можно задавать значения элементв массива сразу при его объявлении:

Обратите внимание, что при этом мы не можем указывать в круглых скобках размеры массива (если укажем, это будет синтаксической ошибкой). Также заметьте, что для двумерного массива мы написали в круглых скобках запятую (именно она и показывает, что массив — двумерный).

Выход за границы массива в VB.NET чреват ошибками. Так для массива A оператор

может вызвать ошибку времени выполнения (но может и не вызвать — это уж как повезет). В любом случае это не синтаксическая ошибка.

Для определения верхней границы массива используйте метод UBound. Вот пример его использования:

Указанный фрагмент выведет на экран 4, 2 и 3. В качестве первого параметра мы должны указывать имя массива, в качестве второго (необязательного) — номер измерения (нумерация начинается с единицы). Если второй параметр опустить, то для него подставится зачение по умолчанию — 1.

Основы VB.NET. Урок 20. Динамические массивы VB.NET

Работа с динамическими массивами в VB.NET аналогична работе в Visual Basic 6. Вот пример:

Как вы видите, тут мы объявили массив A без указания размера:

Далее мы в строке

переопределяем его размер. Теперь в нем стало 3 элемента. В последующих строчках мы заполняем эти три элемента массива, после чего выводим на экран количество элементов в массиве и сами элементы.

Затем мы переопределяем размер еще раз:

Обратите внимание, что это мы делаем с ключевым словом Preserve. При использовании этого слова старые значения элементов массива сохраняются. Если слово Preserve опустить, то старые значения в массиве не сохранятся. Для массива с новым размером мы опять выводим на экран его размер и элементы.

Обзор новых программ. Тематика — программы и утилиты для программирования, WEB-дизайна, работы в Интернете и др. Ссылки на сайты фирм-разработчиков.

VBA Excel. Массивы (одномерные, многомерные, динамические)

Массивы в VBA Excel: одномерные, многомерные и динамические. Объявление и использование массивов. Операторы Public, Dim и ReDim. Функции Array, LBound, UBound.

Массивы — это множества однотипных элементов, имеющих одно имя и отличающиеся друг от друга индексами. Они могут быть одномерными (линейными), многомерными и динамическими. Массивы в VBA Excel, как и другие переменные, объявляются с помощью операторов Dim и Public. Для изменения размерности динамических массивов используется оператор ReDim. Массивы с заранее объявленной размерностью называют статическими.

Одномерные массивы

Объявление одномерных (линейных) статических массивов в VBA Excel:

В первом случае публичный массив содержит 10 элементов от 0 до 9 (нижний индекс по умолчанию — 0, верхний индекс — 9), а во втором случае локальный массив содержит 9 элементов от 1 до 9.

По умолчанию VBA Excel считает в массивах нижним индексом нуль, но, при желании, можно сделать нижним индексом по умолчанию единицу, добавив в самом начале модуля объявление «Option Base 1». Вместо верхнего индекса можно использовать переменную.

Многомерные массивы

Объявление многомерных статических массивов в VBA Excel аналогично объявлению одномерных массивов, но с добавлением размерностей дополнительных измерений через запятую:

Третий массив состоит из 10000 элементов — 10×10×10×10.

Динамические массивы

Динамические массивы в VBA Excel, в отличие от статических, объявляются без указания размерности:

Такие массивы используются, когда заранее неизвестна размерность, которая определяется в процессе выполнения программы. Когда нужная размерность массива становится известна, она в VBA Excel переопределяется с помощью оператора ReDim:

Переопределять размерность динамических массивов в процессе работы программы можно неоднократно, как по количеству измерений, так и по количеству элементов в измерении.

С помощью оператора ReDim невозможно изменить обычный массив, объявленный с заранее заданной размерностью. Попытка переопределить размерность такого массива вызовет ошибку компиляции с сообщением: Array already dimensioned (Массив уже измерен).

При переопределении размерности динамических массивов в VBA Excel теряются значения их элементов. Чтобы сохранить значения, используйте оператор Preserve:

Обратите внимание!
Переопределить с оператором Preserve можно только последнюю размерность динамического массива. Это недоработка разработчиков, которая сохранилась и в VBA Excel 2020. Без оператора Preserve можно переопределить все размерности.

Использование массивов

Приведу два примера, где не обойтись без массивов.

1. Как известно, функция Split возвращает одномерный массив подстрок, извлеченных из первоначальной строки с разделителями. Эти данные присваиваются заранее объявленному строковому (As String) одномерному динамическому массиву. Размерность устанавливается автоматически в зависимости от количества подстрок.

2. Данные в массивах обрабатываются значительно быстрее, чем в ячейках рабочего листа. Построчную обработку информации в таблице Excel можно наблюдать визуально по мерцаниям экрана, если его обновление (Application.ScreenUpdating) не отключено. Чтобы ускорить работу кода, можно значения из диапазона ячеек предварительно загрузить в динамический массив с помощью оператора присваивания (=). Размерность массива установится автоматически. После обработки данных в массиве кодом VBA полученные результаты выгружаются обратно на рабочий лист Excel. Обратите внимание, что загрузить значения в диапазон ячеек рабочего листа через оператор присваивания (=) можно только из двумерного массива.

Функции Array, LBound, UBound

Функция Array

Функция Array возвращает массив элементов типа Variant из первоначального списка элементов, перечисленных через запятую. Нумерация элементов в массиве начинается с нуля. Обратиться к элементу массива можно, указав в скобках его номер (индекс).

Скопируйте код в модуль VBA Excel и запустите его на выполнение. Информационное сообщение MsgBox покажет значения массива, извлеченные по индексу.

Функция LBound

Функция LBound возвращает значение типа Long, равное наименьшему (нижнему) доступному индексу в указанном измерении массива.
Синтаксис:
LBound (arrayname[, dimension])

  • arrayname — это имя переменной массива, является обязательным аргументом;
  • dimension — это номер измерения массива, необязательный аргумент, по умолчанию принимает значение 1.

Наименьший индекс по-умолчанию может быть равен 0 или 1 в зависимости от настроек оператора Option Base. Нижняя граница архива, полученного с помощью функции Array, всегда равна 0.

При объявлении переменных массивов или переопределении их размерности наименьшие индексы могут быть любыми целыми числами, в том числе отрицательными.

Функция UBound

Функция UBound возвращает значение типа Long, равное наибольшему (верхнему) доступному индексу в указанном измерении массива.
Синтаксис:
UBound( arrayname[, dimension])

  • arrayname — это имя переменной массива, является обязательным аргументом;
  • dimension — это номер измерения массива, необязательный аргумент, по умолчанию принимает значение 1.

Функция UBound используется вместе с функцией LBound для определения размера массива.

Скопируйте код в модуль VBA Excel и запустите его на выполнение. Информационное сообщение MsgBox покажет значения наименьшего и наибольшего индекса переменной массива a.

Очистка (обнуление) массивов

Первый способ

Очистить любой массив, статический или динамический, без использования цикла можно с помощью оператора Erase. Термин «обнуление» можно применить только к массиву числового типа.

Обратите внимание, что оба массива при таком способе очистки будут возвращены в исходное состояние, которое они имели сразу после объявления:

  • статический Massiv1 сохранит размерность (4, 3);
  • динамический Massiv2 не сохранит размерность ().

Второй способ

Динамический массив можно очистить (обнулить) без использования цикла с помощью оператора ReDim. Просто переопределите его с той же размерностью.

VBA Excel. Массивы (одномерные, многомерные, динамические) : 12 комментариев

Это все очень интересно и здорово, но хотелось бы еще узнать о заполнении массивов.
Например один цикл поможет заполнить одномерный массив. Два цикла двумерный. Но это в случае когда значения рассчитываются.
А если у меня есть двумерный массив с данными (постоянными) и мне надо его «ввести» в программу — как быть? Самый простой пример — календарь. В строках первый элемент месяц, второй элемент 1 число, третий элемент день недели, четвертое — последний день месяца, пятый — день недели последнего числа месяца.
То есть на входе у меня 12 строк, 5 столбцов, массив 5х12.
Теперь мне надо его заполнить, 60 значений. Цикл не подойдет, надо каждое вносить отдельно.
Чисто теоретически можно представить массив как одномерный массив строк, каждый элемент которого состоит из одномерного массива столбцов. А вот как это присвоение оформить в ВБА?

Артем, вы можете использовать присвоение массиву значений из диапазона ячеек одной строкой кода.

Увы, не могу. Дело в том, что :
1. Я пишу не в Екселе, а в Автокаде — там нет ячеек.
2. Мои данные это по сути константы, мне придется их заносить в ячейки (если делать нечто подобное в Екселе), а затем считывать программно. При этом с листа (из ячеек) их надо прятать, что бы случайно никто не изменил. Поэтому данные необходимо вводить в теле программы в массив и далее с ними работать. В то же время необходимо сделать так, что бы при желании было легко добавить еще одну строку с данными.

Артем, я правильно понял, что вы вносите все данные в массив вручную и хотите сделать автоматическое добавление «пустых строк» в массив под новые данные?


Нет, вручную вношу до 50 «строк», вручную добавляю (при необходимости, а необходимость возникает не часто) по 1-15 строк.
В общем на одном форуме подсказали несколько вариантов. Один из наиболее подходящих (для меня) оказался массив массивов. То есть создается массив, каждый элемент которого это тоже массив, содержащий наименование и далее параметры.
При необходимости просто добавляю элемент массива (строку) с наименованием и параметрами и все.
А вот как правильно обратится к каждому элементу массива и как работать с массивом массивов — вот это хорошо бы у вас в статье отобразить.

Артем, посмотрите еще вариант создания массива одномерных массивов с помощью пользовательских типов данных. Там есть и как заполнить, и как обратиться к каждому элементу.

А как узнать размерность массива?

Иван, размерность массива (количество измерений) вы можете узнать с помощью пользовательской функции KolichestvoIzmereniy.

to Артем:
если массив в автокаде надо заполнять какими-то постоянными данными, то почему бы не хранить эти данные в отдельном файле (напр. txt или dbf) и считывать данные оттуда.

Msgbox не переваривает «;» когда ввожу &amp он пилит её на & amp и никак не учитывает, но стоит добавить в конец «;» чтобы получилось & всю строку выделяет красным!

Привет, Павел!
Это защита WordPress заменила амперсанд & на его html-код. Исправил.

Visual Basic .NET Language Инициализатор коллекции

пример

Контейнеры ( List(Of T) , Dictionary(Of TKey, TValue) и т. Д.)

Элементы могут быть результатом конструктора, вызова метода, доступа к свойствам. Его также можно смешивать с инициализатором Object.

Невозможно использовать синтаксис инициализатора инициализатора AND и инициализатор коллекции для одного и того же объекта одновременно. Например, они не будут работать

Мы также можем разрешить синтаксис инициализатора коллекции, предоставляя настраиваемый тип.
Он должен реализовывать IEnumerable и иметь доступный и совместимый с помощью правил перегрузки метод Add (instance, Shared или even extension)

Если мы хотим добавить объект Person в List(Of Person) , просто поместив его в инициализатор коллекции (но мы не можем изменить класс List (Of Person)), мы можем использовать метод расширения

Использование массивов и коллекций для управления данными

В этой лекции вы узнаете, как:

  • организовывать информацию в массивы фиксированной длины и динамические массивы;
  • сохранять данные массива при изменении его размера;
  • манипулировать коллекцией Controls формы;
  • использовать цикл For Each. Next для перебора объектов, входящих в коллекцию;
  • создавать собственные коллекции для работы со строковыми данными.

Управление информацией в приложении Microsoft Visual Basic . NET является очень важной задачей, и при возникновении более серьезных задач, для хранения и обработки данных вам потребуются дополнительные инструменты. В этой лекции вы узнаете, как организовать переменные и другую информацию в виде удобных контейнеров, называемых массивами. Массивы упрощают процесс управления данными, когда у вас несколько десятков или более элементов данных, и они дают прекрасное введение в методики работы с базами данных, о которых вы узнаете далее в этой книге. Вы также узнаете, как использовать для управления информацией в программе на Visual Basic группы объектов, называемые коллекциями, и как обрабатывать коллекции с помощью специального цикла For Each. Next . Рассмотренные массивы и коллекции вместе являются великолепными инструментами для управления большими объемами информации в программе.

Что нового в Visual Basic .NET?

  • Массивы в Visual Basic .NET всегда отсчитываются с нуля, то есть младший элемент массива всегда имеет индекс 0. В Visual Basic 6 оператор Option Base позволял программистам устанавливать начало отсчета либо на 0, либо на 1. Option Base больше не поддерживается.
  • Так как массивы всегда отсчитываются с 0, их нельзя больше объявлять с помощью ключевого слова To с указанием нижней и верхней границ массива. Другой стороной такого положения дел является то, что оператор LBound всегда возвращает 0, так как нижняя граница массива всегда равна 0. (Однако оператор UBound продолжает возвращать старший индекс массива, который равен количеству элементов минус 1.)

Массивы могут теперь объявляться и им могут присваиваться данные с помощью одного и того же оператора программы. Например, синтаксис для объявления массива с именем myList() и добавления в него четырех элементов будет иметь вид

Работа с массивами переменных

Массивы являются мощным и проверенным временем механизмом для хранения данных программы — разработчики BASIC , Pascal , C и других популярных языков программирования для ссылки на группы значений с помощью одного имени и обработки этих значений включали массивы в самые первые версии этих продуктов.

Массивы полезны тем, что они помогают обрабатывать большие объемы данных такими способами, которые оказались бы нереализуемыми при использовании традиционных переменных. Например, представьте создание в программе бейсбольной доски счета девяти подач. Чтобы сохранить счет для каждой подачи, вы могли бы попытаться создать в программе две группы по 9 переменных (всего 18 переменных). Чтобы сделать их понятными, вы, вероятно, назвали бы их как-нибудь типа Inning1VisitingTeam , Inning1HomeTeam и т.д. Работа с этими переменными по отдельности потребовала бы значительного времени и места в программе. К счастью Visual Basic позволяет организовать группы похожих переменных в массив с одним общим именем и легким в использовании индексом. Например, чтобы хранить счет бейсбольной игры, можно создать двумерный (2 на 9) массив с именем Scoreboard . Как это сделать?

Создание массива

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

Информация в операторе объявления массива Описание
Имя массива Имя, которое будет использовано для представления массива в программе. В основном, имена массивов подчиняются тем же правилам, что и имена переменных. (За дополнительной информацией о переменных обратитесь к «Переменные и операторы Visual Basic .NET» .)
Тип данных Тип данных, хранимых в массиве. В большинстве случаев все переменные в массиве будут относиться к одному и тому же типу данных. Можно указать один из базовых типов данных, или, если вы не уверены в том, какой тип данных будет храниться в массиве. Если вы будете хранить данные разных типов, то можете указать тип Object .
Число измерений Число измерений, содержащихся в массиве. Большинство массивов являются одномерными (список значений) или двумерными (таблица значений), но, если вы работаете со сложной математической моделью, такой, как трехмерная фигура, то можете указать дополнительные измерения.
Число элементов Число элементов, содержащихся в массиве. Элементы в массиве непосредственно связаны с индексом массива. В Visual Basic .NET первый индекс массива всегда 0.

Объявление массива фиксированной длины

Базовый синтаксис открытого массива фиксированной длины такой:

Здесь важную роль играют следующие аргументы.

  • Dim — это ключевое слово, которое объявляет массив. Если вы помещаете массив в стандартный модуль, то используйте вместо него слово Public .
  • Имя_массива — это имя переменной массива.
  • объявление_индекса1 — это верхняя граница первого измерения массива, которая равняется количеству элементов минус 1.
  • объявление_индекса2 — это верхняя граница второго измерения массива, которая равняется количеству элементов минус 1. (Через запятую можно добавлять дополнительные измерения массива.)
  • тип_данных — это ключевое слово, соответствующее типу данных, которые будут содержаться в этом массиве.

Например, чтобы объявить одномерный строковый массив с именем Employees , которые может хранить 10 имен сотрудников (пронумерованных от 0 до 9), необходимо ввести в процедуре события следующую строку:

В стандартном модуле это же объявление массива будет выглядеть так:

Когда вы создаете массив, Visual Basic выделяет для него место в памяти. На следующей иллюстрация показана концепция организации массива. 10 элементов массива пронумерованы от 0 до 9, а не от 1 до 10, так как индексы массива всегда начинаются с 0. (Оператор Option Base из Visual Basic 6, который позволял вам индексировать массивы, начиная с 1, больше не поддерживается.)

Чтобы объявить открытый двумерный массив с именем Scoreboard , который может хранить две строки и девять столбцов данных типа короткого целого, нужно ввести в процедуре события или в верхней части формы такой оператор:

Когда вы создаете двумерный массив, Visual Basic выделяет для него место в памяти. Затем вы можете использовать этот массив в вашей программе так, как будто это таблица значений, как показано на следующей иллюстрации. (В этом случае элементы массива пронумерованы от 0 до 1 и от 0 до 8.)

Глава 2 Основы языка Visual Basic

Почти все программы имеют одинаковую структуру. В хорошей программе явно выделены области объявления переменных, функций и процедур, везде присутствуют одни и те же циклы и управляющие логические конструкции, всегда можно найти операторы сравнений. Разница лишь в ключевых словах, которые используются в том или ином языке программирования. В данной главе мы рассмотрим основные конструкции языка Visual Basic.

Почему мы рассматриваем именно Visual Basic? Дело в том, что именно на этом языке изначально писались сценарии для ASP, поэтому стоит рассматривать именно этот язык в качестве рабочей лошадки для ASP-сценариев. Если быть более точным, надо заметить, что при разработке сценариев ASP.NET мы используем язык Visual Basic .NET, который несколько отличается от канонического Visual Basic. Однако эти отличия не так уж и кардинальны, и там, где они будут важны для создания сценариев ASP.NET, мы упомянем об этих изменениях.

Естественно, мы не будем рассматривать язык Visual Basic .NET полностью. Дело в том, что для нужд создания сценариев ASP.NET нужны далеко не все его возможности. Но все, что действительно необходимо для ASP, мы рассмотрим.

Основа любой программы — это ее управляющая логика, т. е. те самые циклы, операторы сравнений и прочие конструкции, обуславливающие порядок действий программы.


Яростные приверженцы объектно-ориентированной модели программирования могут заметить, что основой программы является именно объектная модель. Но ради объективности надо признать, что это не так. Программы писались еще в те времена, когда об объектах никто и не задумывался. Все-таки управляющая логика это основа, альфа и омега любой программы.

Начнем мы с основного оператора управляющей логики — условного оператора. В языке Visual Basic он имеет предельно детализированный вид и объявляется следующим образом:

If условие [ Then ]

[ блок кода > [ Elself условие [ Then ]

[ блок кода ] ] [ Else

[ блок кода ] > End If

Детально рассмотрим это формальное объявление оператора. Обязательным ключевым словом является, естественно, слово if. После него мы указываем либо логическое условие (или их комбинацию), либо переменную булева (логического) типа. После ключевого слова Then размещается блок кода, который будет выполнен в том случае, если логическое условие истинно. Или булева переменная имеет значение True. Блок, начинающийся с ключевого слова Eiseif, позволяет задать еще одно логическое условие, которое будет проверяться на истинность в том случае, когда первое условие, находящееся после ключевого слова if, является ложным. Как и в первом блоке оператора, код, выполняемый в случае истинности условия, размещается после ключевого слова Then. Если же оба логических условия оказываются ложными, мы можем использовать третий раздел оператора, начинающийся с ключевого слова Else. Сразу после него размещается блок кода, выполняемый в том случае, если все логические условия оказались ложными. Завершается весь условный оператор комбинацией ключевых слов End if. Необходимо также отметить, что второй и третий блоки оператора не являются обязательными.

Приведем пример использования условного оператора. Рассмотрим следующую конструкцию:

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

Но, как мы уже говорили, последние два блока оператора являются необязательными, поэтому без них можно обойтись, если необходимо просто проверить некоторое условие. В этом случае условный оператор будет выглядеть следующим образом:

Легко увидеть, что реализация условного оператора в Visual Basic .NET явно несколько утяжелена по сравнению с остальными распространенными языками программирования. Как мы увидим позже, подобная избыточность свойственна практически всем управляющим конструкциям Visual Basic .NET.

Логическим продолжением условного оператора является оператор выбора select. Его формальное объявление выглядит следующим образом:

Select [ Case ] testexpression

В теле этого оператора при помощи ключевого слова Case мы можем задавать логические условия и сопоставлять им блоки кода. Причем количество ключевых слов Case и связанных с ними логических условий ограничивается только требованиями программиста. Более того, в операторе присутствует ключевое слово Else. Блок кода, связанный с ним, выполняется в том случае, если ни одно из вышеперечисленных логических условий не было истинным.

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

Оператор select связывается с переменной i. А в первом условии проверяется, входит ли значение этой переменной в промежуток между единицей и десятью.

В логических условиях оператора select мы можем использовать ключевое слово is, применяемое в связке с операторами логического сравнения. Так, например, для того, чтобы выполнить некий блок кода в том случае, если значение основной переменной оператора больше пяти, следует использовать следующий код:

Завершается оператор, как видно из объявления, комбинацией ключевых слов End Select.

Приведем пример использования оператора Select. Рассмотрим следующий фрагмент кода:


з=»0т единицы до пяти»

s =»Или шесть или семь»

s =»Больше восьми»

s =»Судя по всему, меньше единицы»

Рассмотрим работу этого оператора. Все логические условия завязаны на переменную i. Первое условие проверяет вхождение значения основной переменной в интервал от единицы до пяти. В том случае, если это условие является истинным, то переменной s, очевидно имеющей строковый тип, присваивается значение От единицы до пяти. Второе условие проверяет, не равно ли значение основной переменной оператора шести или семи. Легко заметить, что в случае перечисления сравниваемых значений, они просто разделяются запятой. Соответственно, если это условие выполняется, то переменной s присваивается другое значение. Третье и последнее логическое условие будет истинным, если значение основной переменной оператора больше восьми. В том случае, если ни одно из перечисленных условий не выполняется, управление переходит к блоку кода, указанному после комбинации ключевых слов Case select. Впрочем, этот блок не является обязательным.

Настало время рассмотрения циклов. Стандартный цикл For, связанный с переменной-счетчиком, объявляется следующим образом:

For counter = start To end [ Step step ]

Процесс выполнения такого цикла связан не с каким-либо логическим условием, а с переменной-счетчиком, на основе которой вычисляется количество проходов цикла. Простейший пример подобного цикла выглядит следующим образом:

В этом цикле мы каждому элементу массива присваиваем значение, в два раза больше его порядкового номера. Следует отметить, что нумерация массива начата с нуля, что нетипично для Visual Basic. Это нововведение Visual Basic .NET, которое мы рассмотрим в разделе, посвященном созданию массивов и работе с ними.

По умолчанию, после каждого прохода цикла значение переменной-счетчика увеличивается на единицу. Цикл будет выполняться до тех пор, пока значение переменной-счетчика не превысит числа, указанного после ключевого слова то. Однако могут возникать случаи, когда необходимо при прохождении цикла изменять значение счетчика не на единицу. В этом случае следует использовать необязательное ключевое слово step, после которого указывается величина изменения счетчика с каждым проходом цикла, т. е. если мы хотим модифицировать цикл из вышеприведенного примера так, чтобы операции присваивания производились только с четными элементами массива, следует использовать следующий фрагмент кода:

For i=0 To 9 Step 2

После ключевого слова Next мы можем указать наименование переменной-счетчика цикла. Это указание переменной не является обязательным, но может помочь в создании более понятного кода, когда применяются встроенные циклы. Посмотрите на такой пример:

В данном случае, дополнительное указание наименований счетчиков в конце цикла помогает читать код.

На основе приведенных примеров может сложиться впечатление, что переменная-счетчик для данного цикла может обладать только целочисленным типом. На самом деле это не так. Для создания переменных-счетчиков может применяться любой численный тип, для которого поддерживаются арифметические операции сложения и вычитания, а также логические операции «больше» и «меньше».

Существует и еще одна вариация цикла For. Она применяется в тех случаях, когда необходимо обработать все элементы некоей группы. Это могут быть элементы коллекций, списков, различных стеков и прочих групп. Пример подобного цикла выглядит следующим образом:

For Each myitem In mylist

Как видно, структура подобного цикла достаточно прозрачна. Начало цикла формируется при помощи комбинации ключевых слов For Each, после которых указывается наименование элементов, по которым будет проходить цикл. Затем следует ключевое слово in, после которого мы указываем наименование списка, в который входят обрабатываемые элементы. В нашем случае мы производим обработку всех элементов myitem, которые являются вложенными частями объекта mylist. Естественно, в данном случае нам не нужна переменная-счетчик, для контроля над количеством проходов цикла. Легко заметить, что в приведенном примере мы успешно обошлись без нее. Завершается цикл при помощи знакомого нам уже ключевого слова Next.

Также часто применяются циклы, основанные на каких-либо логических условиях. То есть тело цикла будет выполняться до тех пор, пока заранее оговоренное условие не станет истинным или ложным (в зависимости от того, какую разновидность цикла использует разработчик). Подобные циклы объявляются следующим образом:

Это объявление так называемого цикла с предусловием. То есть, перед выполнением очередного прогона цикла проверяется логическое условие, и в зависимости от результата проверки действие цикла может быть выполнено или нет. Ключевое слово until применяется в тех случаях, когда цикл должен выполняться до тех пор, пока логическое условие является истинным. Примером подобного цикла является следующий фрагмент кода:

Следует заметить, что в данном конкретном случае мы все же использовали переменную-счетчик, пусть и опосредованную. Но все зависит от логики программы. Часто подобные циклы применяются и без счетчиков.

Легко увидеть, что в приведенном примере цикл будет выполняться до тех пор, пока условие не станет ложным. Если же мы будем использовать ключевое слово until вместо while, то цикл будет выполняться до тех пор, пока условие не станет истинным.

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

Как видно, отличие от первого варианта цикла очень невелико — условие продолжения работы вместе с ключевым словом until или while перенесено в конец цикла.

Итак, мы рассмотрели практически все управляющие конструкции языка Visual Basic .NET. Без внимания остались некоторые элементы управляющей логики, которые автор не счел нужным приводить. Одним из таких пропущенных элементов является ключевое слово goto, обеспечивающее прямую передачу управления какой-либо строке программы. Понятно, что этот пережиток прошлого должен быть как можно быстрее забыт, так как эта разновидность управления ходом выполнения программы устарела даже в момент появления парадигмы модульного программирования. Сейчас это просто дополнительный источник ошибок, которых и без того немало в наших программах, средство ухудшения читабельности кода и просто признак плохого стиля программирования.

Какими бы сложными объектами, массивами или коллекциями мы ни пользовались, следует помнить, что основой их являются единичные переменные.

Это основные кирпичики информации, атомы, из которых будет формироваться впоследствии сложная ткань огромных объектов. Конечно, в конце концов, вся информация в компьютерных системах представляется в численном виде, поэтому теоретически мы могли бы обойтись и одним-единственным типом данных. Причем раньше, во времена ассемблера, так и было. Но сейчас это уж слишком хлопотно. Следует точно знать, какой именно вид информации хранится в той или иной переменной, и в соответствии с этим знанием применять к ней те или иные функции обработки.

Visual Basic .NET все-таки обрел достаточно хорошую типизацию. Рассмотрим краткий перечень возможных типов переменных Visual Basic .NET. Типы перечислены в алфавитном порядке.

  • Boolean . Логический тип. Для хранения переменной отводятся два байта. Переменная может принимать только два значения: True (Истина) И False (Ложь).
  • Byte. Числовой тип. Для хранения переменной отводится один байт. Значение переменной может находиться в промежутке от нуля до двухсот пятидесяти пяти. Знак не используется.
  • Char. Символьный тип. Для хранения переменной отводятся два байта. В качестве значения переменной обычно применяются символы. Так как используются теперь два байта, разработчики могут применять символы Unicode.
  • Date. Предназначен для хранения дат. Переменная занимает восемь байт. Возможные значения находятся в промежутке от первого января первого года нашей эры до тридцать первого декабря девять тысяч девятьсот девяносто девятого года 1.
  • Decimal. Самый мощный числовой тип. Для хранения переменной подобного типа отводится шестнадцать байт. Отрицательная и положительная границы промежутка, в котором располагаются возможные значения этой переменной, одинаковы по модулю и равны +/-79 228 162 514 264 337 593 543 950 335, если использовать целые числа. Если же необходимо хранить дробные величины, то границы возможных значений будут смещены на несколько порядков в зависимости от того, сколько знаков после запятой использует разработчик. Подобный тип может использоваться только для хранения десятичных дробей. Разработчик может использовать до двадцати восьми знаков после запятой.
  • Double. Числовой тип. Применяется для хранения чисел в экспоненциальной форме. Для хранения переменной отводится восемь байт. Отрицательные значения находятся в промежутке от —1,79769313486231Е+308 до —4,94065645841247Е—324. Положительные значения входят в промежуток от 4,94065645841247Е-324 до 1.79769313486231Е+308.
  • I nteger. Предназначен для обработки целочисленных значений. Переменная подобного типа занимает четыре байта. Возможные значения находятся в промежутке от -2 147 483 648 до 2 147 483 647.
  • Long. Предназначен для целочисленных значений. Для хранения переменной отводятся восемь байт. Возможные значения переменной подобного типа находятся в промежутке от —9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.
  • O bject. По сути, переменная подобного типа является всего лишь ссылкой на некий конкретный экземпляр какого-либо объекта. Для хранения переменной отводятся четыре байта.
  • S hort. Облегченный целочисленный тип. Для хранения переменной отводятся два байта. Возможные значения переменной данного типа находятся в промежутке от —32 768 до 32 767.
  • S ingle. Предназначен для хранения чисел в экспоненциальной форме. Для хранения переменной отводятся четыре байта. Отрицательные возможные значения переменной такого типа расположены в промежутке от -3,402823Е+38 до -1,401298Е

45. Положительные значения укладываются в промежуток от 1.401298Е-45 до 3,402823Е+38.

  • S tring. Строковый тип. Предназначен для хранения строк различной длины. Возможная длина строки может Доходить до двух миллионов символов кодировки Unicode. Объем памяти для хранения переменной выделяется в зависимости от длины строки.
  • Мы рассмотрели все предустановленные типы Visual Basic .NET. На самом деле, разработчик может создавать собственные типы, но в работе с ASP.NET эта возможность, скорее всего, не потребуется. В крайнем случае, можно обойтись объектами. Сейчас уже нет смысла создавать собственный тип переменных просто для экономии оперативной памяти. Учитывая ее типичные объемы на машинах, предназначенных для работы WWW-серверов и возможности автоматического сборщика мусора, действующего в среде Microsoft .NET Framework, можно пользоваться оперативной памятью без оглядки на ее объем. И уж точно не стоит экономить на нескольких байтах, ухудшая тем самым читабельность и стройность кода.

    Если есть типы данных, то существуют и переменные. А если мы используем переменные в своих приложениях, следует уметь их объявлять. Объявление переменных производится при помощи комбинации ключевых слов Dim и as. Типичный пример объявления целочисленных переменных выглядит следующим образом:

    Dim i,j As Integer

    При помощи ключевого слова Dim мы начинаем объявление переменных, за ним указываются наименования этих переменных, а после ключевого слова as записывается их тип. Программы на языке Visual Basic .NET имеют строковую структуру, т. е. в каждой строке кода может находиться только один оператор. Таким образом, разработчик избавлен от необходимости отделять операторы друг от друга при помощи символов-разделителей, таких, как символ точки с запятой. В нашем случае это означает, что мы должны использовать ключевое слово Dim перед каждой строкой объявления переменных, т. е. если необходимо объявить несколько целочисленных переменных и одну булеву, следует использовать следующий фрагмент кода:

    Dim i,j As Integer

    Dim r As Boolean

    На самом деле, объявление переменных может быть и не таким простым. Мы можем создавать глобальные и защищенные переменные, дружественные, статические и частные. Но все эти дополнительные возможности необходимы лишь для работы с разветвленной объектной иерархией, которая явно не нужна в приложениях ASP.NET.

    Естественно, в языке Visual Basic .NET существует ряд функций, которые позволяют преобразовывать типы. Вот их список.

    CB оо l . Возвращает булево значение. В качестве параметра функции может быть передано какое-либо условие или числовое значение.

    CByte. Возвращает значение типа Byte. В качестве параметра передается соответствующая строка или числовое значение.

    CC har. Возвращает символ. В качестве параметра передается целое число, находящееся в промежутке от 0 до 65 535.

    CDate. Возвращает значение типа Date. В качестве параметра можно использовать любое принятое в операционной системе обозначение даты.

    • CDbl . Преобразовывает значение параметра к типу Double.
    • CD ес. Применяется для преобразования параметра к типу Decimal.
    • CI nt. Преобразовывает значение параметра к целочисленному типу integer. Если в качестве параметра передано дробное число, то дробная часть просто округляется.
    • CLng. Возвращает значение типа Long. Обработка параметра производится по образцу функции cint.
    • CS hort. Преобразовывает переменную или значение к типу short.
    • CS ng. Применяется для преобразования параметра к типу single.
    • CS tr. Используется для преобразования данных в строковый тип string. Если в качестве параметра функции передается булево значение, то возвращается строка True или False. Если передаются данные типа Date, то функцией возвращается строка, содержащая обозначение даты в принятом для системы формате. Любое числовое значение преобразовывается в символьное представление данного числа.

    И на этом мы заканчиваем рассмотрение простых типов данных, принятых в языке программирования Visual Basic .NET.

    Массивы и коллекции

    Все мы знакомы с понятием массивов. Это просто совокупности переменных одного типа, объединенных одним именем. Доступ к конкретному элементу массива производится при помощи указания его порядковых номеров.

    В Visual Basic.NET массивы объявляются точно так же, как и обычные переменные. Отличает их только указание размера массива. То есть, если мы хотим объявить целочисленный массив, содержащий десять элементов, следует воспользоваться следующей конструкцией:

    Dim my_array(10) As Integer

    Естественно, разработчик не ограничен одномерными массивами. Язык Visual Basic .NET позволяет создавать многомерные массивы. При этом программист может использовать для своих массивов до тридцати двух измерений. Обычно этого количества более чем достаточно. Если же вам необходимы массивы с большей степенью размерности, то либо вы несколько неправильно спроектировали свое приложение, либо вы — гений, который в состоянии свободно оперировать более чем тридцатью двумя измерениями. Правда, далеко не факт, что с обработкой подобного массива легко справится ваша система.

    Объявление многомерных массивов практически ничем не отличается от объявления одномерных массивов. Просто в скобках после имени массива следует перечислить размеры массива по всем измерениям, а именно, если мы хотим объявить целочисленный массив, представляющий собой квадратную матрицу размером десять на десять элементов, следует использовать следующий фрагмент кода:

    Dim my_array(10,10) As Integer

    Как мы знаем, все языки, входящие в семейство Microsoft .NET, должны действовать практически одинаково, чтобы создавать идентичный runtime-код. А у языков Visual Basic и C++ есть одно коренное различие в обработке массивов. В C++ нумерация элементов массива начинается с нуля, а в Visual Basic — с единицы. Корпорация Microsoft пошла на серьезный шаг и объявила, что теперь в языке Visual Basic .NET элементы массивов нумеруются с нуля. Честно говоря, меня это известие обрадовало, так как для меня язык С является «родным», и нумерация с нуля кажется мне более естественной. Той же самой точки зрения придерживаются многие разработчики, до знакомства с Visual Basic работавшие с языками C++ или Pascal. На самом деле, такая нумерация более органична для компьютерных систем.

    Однако этот, вне сомнения, «дерзкий и революционный» шаг Microsoft практически «убил» совместимость языка Visual Basic .NET с программами, разработанными на старых версиях языка Visual Basic. Теперь не получится просто перекомпилировать их в новой среде разработки, так как фактически у массивов получится на один элемент меньше, чем ожидали разработчики. Поэтому, чтобы не потерять совместимость с ранее написанными программами, было принято следующее «соломоново» решение. Массивы действительно нумеруются с нуля, но при этом, в момент объявления массива им автоматически добавляется по одному дополнительному элементу по всем измерениям. Таким образом, действительно достигается совместимость со старыми программами, и в то же время предоставляется возможность разработчикам при создании новых приложений пользоваться нумерацией элементов массива с нуля.

    Язык Visual Basic .NET предоставляет возможность переобъявить массив в процессе работы программы, изменив его размеры. Сама идея переобъявления массива явно необычна для стиля программирования последних лет, она, скорее, унаследована из начала истории языка Visual Basic. Однако такая возможность есть, поэтому нам следует знать, как использовать ее.

    Для переобъявления массива используется ключевое слово Re Dim. Процедура изменения размеров массива выглядит приблизительно следующим образом:

    Dim my_array(10,10) As Integer

    После выполнения директивы ReDim размер массива my_array по второму измерению будет увеличен вдвое. При этом необходимо осознавать, что мы можем изменить лишь объем массива, но не его тип или количество измерений массива. Также по умолчанию при переобъявлении массива значения его элементов теряются. Если же необходимо сохранить их, следует использовать ключевое слово Preserve. В этом случае процедура переобъявления размеров массива будет выглядеть следующим образом:

    Dim my_array(10,10) As Integer

    ReDim Preserve my_array(10, 20)

    Следует также помнить, что при создании любого массива, он автоматически становится объектом. Да, в объектной иерархии Visual Basic .NET существует объект System.Array, и любой массив является экземпляром данного класса. Никто не заставляет разработчика относиться к массиву как к классу, и применять соответствующие свойства, методы и приемы программирования, но в определенных ситуациях есть смысл воспользоваться массивом как объектом. Полное рассмотрение методов и свойств объекта System.Array находится в разделе, посвященном объектной иерархии языка Visual Basic .NET.

    Альтернативой массивам данных с жестко заданными размерами являются так называемые «коллекции». Это просто набор однотипных элементов.

    У коллекций нет жестко заданных размеров, и они изначально являются объектами. Поэтому объявление коллекции не обойдется без ключевого слова New, при помощи которого выделяется память под те или иные экземпляры различных классов, т. е. стандартное объявление коллекции будет выглядеть следующим образом:

    Dim my_col As New Collection ( )

    Видно, что при объявлении мы не указываем тип элементов коллекции. Этот тип будет определен автоматически, как только будет добавлен к коллекции ее первый элемент. Добавление элемента к коллекции производится при помощи метода Add, а удаление элемента при помощи метода Remove. Пример работы с этими методами приведен в следующем фрагменте кода:

    my_col.Add(New my_object, «Пустой элемент»)

    Теперь разберем этот фрагмент кода. Метод Add, как мы видели, получает два параметра. Мы добавляем в коллекцию переменную my_object, которая на самом деле является объектом. Более того, этот экземпляр объекта не был инициализирован, и для него не была выделена память. Поэтому мы в качестве первого параметра метода Add, используем связку наименования экземпляра объекта и ключевого слова New, которое заставляет систему выделить требуемый объем памяти. Таким образом, мы добавляем в коллекцию новый пустой экземпляр объекта.

    Второй параметр метода Add является текстовой строкой, которая описывает добавляемый элемент. Дело в том, что доступ к отдельным элементам коллекции может производиться как по их номеру, так и по текстовому описанию. Естественно, текстовые описания различных элементов коллекции не должны совпадать.

    Вторая строка рассматриваемого фрагмента кода содержит метод Remove, при помощи которого удаляется какой-либо элемент коллекции. В качестве параметра данному методу передается либо порядковый номер удаляемого элемента, либо его текстовое описание. В нашем случае мы удаляем первый элемент коллекции. Необходимо помнить, что нумерация элементов коллекции начинается с единицы, а не с нуля, как у элементов массива.

    Для доступа к конкретному элементу коллекции следует воспользоваться методом item. В качестве параметра данному методу может передаваться порядковый номер требуемого элемента коллекции или его текстовое уникальное описание. Использование данного метода показано в следующем фрагменте кода:

    Данная операция присваивает переменной t значение первого элемента коллекции. Излишне напоминать, что типы переменной и элемента коллекции должны совпадать. Впрочем, метод item используется для коллекций по умолчанию, поэтому предыдущая операция может быть записана следующим образом:

    Обработку всех элементов коллекции удобнее всего производить при помощи цикла For Each. Однако можно воспользоваться стандартным циклом For, если знать количество элементов в коллекции. Это количество хранится в свойстве count. Естественно, это свойство имеет статус «только для чтения».


    Теперь пришло время рассмотреть список стандартных функций языка Visual Basic .NET. Некоторые из них явно не понадобятся для разработки ASP-приложений, но их очень немного. В конце концов, встроенные функции это возможности языка, которые и создают действующий код в рамках тех или иных управляющих логических конструкций. Поэтому приводится список встроенных функций Visual Basic .NET в алфавитном порядке.

    • Abs. В качестве параметра передается любое числовое значение или переменная числового типа. Функция возвращает абсолютное значение параметра, т. е. его модуль. Тип возвращаемого значения всегда совпадает с типом переданного параметра.
    • AppActivate. Передает фокус ввода окну какого-либо открытого приложения. В ASP.NET, естественно, не используется.
    • asc. Возвращает числовое представление символа, переданного функции в качестве параметра. По сути дела, функция возвращает числовой код символа-параметра. В качестве параметра может также передаваться значение типа string, но возвращаться будет числовой код первого символа переданной строки. Возвращаемое значение имеет тип integer.
    • ascw. В качестве параметра принимается только значение типа string. В остальном механизм действия функции идентичен функции as с.
    • At п. Реализует математическую функцию арктангенса. Передаваемый параметр и значение функции имеют тип Double.
    • Веер. Воспроизводит единичный звук при помощи встроенного динамика компьютера. Не требуется никаких параметров, никаких значений не возвращается. Функция явно унаследована из предыдущих версий Visual Basic и в данное время практически не используется. И уж тем более, не потребуется в ASP-приложениях, так как они исполняются на www-сервере, следовательно, и звук будет воспроизводиться на сервере.
    • CaiiByName. Выполняет некий метод объекта, переданного в качестве параметра, или устанавливает значения свойств этого объекта. Явно бесполезна в современных условиях программирования с плотным использованием стандартных методов объектно-ориентированного программирования.
    • choir. Меняет текущий каталог. В качестве параметра передается путь к каталогу, который будет текущим.
    • chorive. Меняет текущий логический диск. В качестве параметра передается символ, обозначающий диск, который будет текущим.
    • choose. В качестве параметров передается числовое значение типа Double и список элементов, из которых функция будет выбирать возвращаемое значение. Выбор значения производится на основе переданного числового параметра.
    • chr. Функция возвращает символ, код которого передан ей в качестве параметра. Параметр имеет тип integer, возвращается значение типа Char.
    • Command. Применяется в разработке приложений, которые будут скомпилированы в отдельный исполняемый ехе-файл. Возвращает строку с опциями, введенными в командную строку после наименования исполняемого файла. В ASP-приложениях не используется.
    • Cos. Реализует математическую функцию косинуса. Передаваемый параметр и значение функции имеют тип Double.
    • Createobject. Создает СОМ-объект и возвращает ссылку на него. В качестве обязательного параметра передается идентификатор создаваемого объекта. Также может быть передано наименование объекта, но данный параметр не является обязательным.
    • CurDir. Возвращает значение типа string, в котором содержится путь к текущему каталогу. В качестве необязательного параметра может быть передан символ, идентифицирующий существующий в системе логический диск. В этом случае будет возвращен путь к текущему каталогу на этом диске. Если параметр не задан, то для расчета значения будет использован текущий диск.
    • DateAdd. Возвращает дату, определяемую на основе параметров, переданных в функцию. Функция обладает тремя обязательными параметрами. Первый параметр обозначает тип интервала времени, который будет отсчитываться от стартовой даты. Этот интервал может иметь тип Datelnterval или String. Значения типа Datelnterval это всего лишь несколько констант. Им соответствуют строковые константы, которые можно использовать в качестве первого параметра. Полный список констант типа Datelnterval и соответствующих им строковых значений приведен в приложении. Второй параметр содержит количество отсчитываемых интервалов. А в качестве третьего параметра используется дата, от которой и будет вестись отсчет. Таким образом, если мы используем

    функцию DateAdd(DateInterval.Day,I,#Jan 1,2002#), то в качестве результата ее деятельности мы получим значение #Jan 2,2002#, т.е. второе января две тысячи второго года.

  • DateDiff. Возвращает разницу между двумя датами в качестве значения типа Long. Принимает три параметра. Первым параметром передается тип интервала времени, в котором будет вестись отсчет разницы между сравниваемыми датами, т. е. если мы указываем тип, ориентированный на дни, то результатом действия функции будет разница именно в днях. Второй и третий параметры имеют тип Date. Это соответственно те даты, разница между которыми вычисляется функцией.
  • DatePart. Возвращает в качестве целочисленного значения определенную часть даты. В качестве параметров функции передаются уже знакомое нам указание типа интервала и дата, из которой необходимо выделить фрагмент. Так, если мы укажем тип промежутка времени, ориентированный на месяцы, то в качестве результата работы функции мы получим номер месяца, в котором находится искомая дата, переданная как второй параметр.
  • DateSeriai. Возвращает значение типа Data, созданное на основе трех целочисленных значений, переданных функции в качестве параметра, а именно, в функцию передаются год, месяц и день как значения типа integer. Так, выражение DateSeriai (2002,2, 9> возвращает значение типа Date, указывающее на девятое февраля две тысячи второго года.
  • DateValue. Как и предыдущая функция, создает значение типа Date, но при этом опирается не на числовое представление ее частей, а на строковое отображение даты, т. е. в качестве параметра данной функции передается строка, описывающая некоторую дату в установленном формате операционной системы. Для того чтобы получить значение, указывающее на девятое февраля две тысячи второго года, как в предыдущем примере, следует воспользоваться вызовом DateValue( «February 09, 2002»).
  • Day. Возвращает конкретное число, т. е. номер дня в месяце, опираясь на дату, переданную в качестве параметра. Возвращаемое значение имеет тип integer, другими словами, выражение Day(#Feb 9, 2002#) возвратит число «девять».
  • DeieteSetting. Удаляет из реестра операционной системы записи о каком-либо приложении. В качестве параметров функции передаются официальное наименование приложения, записи которого будут удалены, и наименования раздела реестра, из которого будут удаляться эти записи. В качестве необязательного параметра может быть добавлено точное наименование конкретной записи, которая подлежит удалению. Естественно, в приложениях AS P.NET функция не используется.
  • Dir. Возвращает наименование файла, включая его расширение. В качестве необязательных параметром может быть передана строка, включающая в себя путь к каталогу, в котором необходимо найти файл, и шаблон его имени, а также атрибуты файла. Если эти параметры не задаются, в качестве результата будет возвращено наименование первого найденного файла в текущем каталоге. Так, функция Dir(«C:\docs\*.txt») вернет наименование первого найденного текстового файла в каталоге docs, находящемся на диске С. Если в данном каталоге нет файлов с подобным расширением, будет возвращена пустая строка.
  • Environ. Возвращает значение системной переменной окружения, наименование которой передано функции в виде строки. Возвращается также значение типа string.
  • eof. Функция возвращает логическое значение, сигнализирующее о достижении границы файла, открытого для чтения. В качестве значения функции передается значение типа integer, являющееся дескриптором читаемого файла. В том случае, если указатель позиции, с которой производится чтение, указывает уже на конец файла, функция возвращает значение True.
  • ErrorToString. Функция конвертирует код ошибки в текстовое обозначение ошибки. Естественно, при этом используются официальные англоязычные наименования ошибок. Чаще всего применяется для вывода информации в модальных окнах, сообщающих об ошибках, поэтому используется в приложениях ASP.NET крайне редко.
  • FileAttr. Функция возвращает режим доступа к открытому ранее файлу. В качестве значения передается целочисленный дескриптор искомого файла. Возвращаемое значение имеет тип integer.
  • Fiieciose. Закрывает открытый для доступа файл. В качестве параметра передается целочисленный дескриптор открытого файла.
  • FileCopy. Копирует файл в другой каталог. В качестве параметра в функцию передаются полное имя копируемого файла и путь к каталогу, куда необходимо скопировать этот файл. Если при этом необходимо сменить имя файла, во втором параметре может быть указан не просто путь к каталогу, а полное наименование создаваемого файла.
  • FiieDateTime. Возвращает значение типа Date, в котором показывается дата создания или последней модификации файла, полный путь к которому передается как строка в качестве параметра функции.
  • FiieLen. Возвращает объем файла в байтах. Полный путь к файлу передается в функцию как параметр. Возвращаемое значение имеет тип Long.
  • FiieOpen. Открывает файл. В качестве параметра функции передается целочисленное значение, указывающее дескриптор открываемого файла (другими словами об уникальности дескрипторов файла должен заботиться сам разработчик), имя открываемого файла и вариант доступа к нему.
  • Fiiewidth. Задает длину строк, которые будут считываться из файла, открытого для чтения. В качестве параметров функции передаются дескриптор открытого файла и целочисленное значение, которое и устанавливает длину читаемых строк.
  • Fix. Обрезает дробную часть у числового значения, переданного в качестве параметра, и возвращает целое число. Необходимо учитывать, что эта функция не округляет параметр до ближайшего целого, а просто отбрасывает его дробную часть.
  • Formatcurrency. Функции передается некая строка или объект как параметр, а функция преобразовывает его в финансовый формат. Особенности формата обуславливаются установками операционной системы.
  • FormatDateTime. Преобразовывает переданный параметр в строку, которая содержит дату. Особенности формата даты, как и в предыдущей функции, определяются установками операционной системы.
  • FormatNumber. Преобразовывает в строку числовое значение, переданное в качестве параметра.
  • FormatPercent. Функция форматирует переданный параметр как строку с добавлением знака процента.
  • FreeFiie. Функция не имеет параметров. Выдает целочисленное значение, которое можно использовать как дескриптор для открываемого файла, т. е. данная функция фактически возвращает свободный дескриптор, который затем разработчик должен использовать для открытия файла.
  • GetAiisettings. Функция возвращает двумерный массив строк, состоящий из наименований записей некоего приложения в реестре операционной системы и их значений. В качестве параметров функции передаются официальное наименование приложения, записи которого необходимо получить в реестре, и наименования раздела реестра, откуда будут извлечены искомые данные.
  • GetAttr. Функция возвращает атрибуты файла, путь к которому передан функции в качестве параметра. Возвращаемое значение имеет перечислимый ТИП FileAttribute.
  • Getchar. Функция возвращает символ с указанным порядковым номером из строки. Сама строка, откуда извлекается символ, и порядковый номер извлекаемого символа передаются функции в качестве параметров.
  • GetExeption. Функция возвращает исключение, которое могло произойти в результате действий приложения. Функция применяется только в составе объекта егг. Возвращаемое значение имеет тип Exception.
  • Getsetting. Возвращает значение одного конкретного ключа в реестре операционной системы для некоего приложения. В качестве параметров функции передаются наименование приложения, которому соответствует данный ключ, секция реестра и наименование ключа, значение которого будет возвращать функция.
  • Hex. Возвращает строку, в которой записано шестнадцатеричное представление целого числа, переданного функции в качестве параметра. Параметр может иметь любой целочисленный тип, от Byte до Long. Также может быть передан параметр типа object, но в этом случае ответственность за передачу правильного значения перекладывается на разработчика. В том случае, если передано не целое число, параметр будет округлен до ближайшего целого.
  • Hour. Функция выделяет из параметра, имеющего тип DateTime, час и возвращает его номер в качестве значения, имеющего тип integer. Результат, естественно, лежит в промежутке от нуля до двадцати трех.
  • iif. Функция является аналогом условного оператора if. В качестве параметров ей передается логическое условие и два значения, одно из которых она вернет в качестве результата. Эти два параметра имеют тип object, т. е. фактически, разработчик может использовать любой тип. В том случае, если переданное как первый параметр, логическое значение истинно, функция возвращает второй параметр. Если логическое значение ложно, возвращается третий параметр.
  • input. Функция читает данные из открытого файла. В качестве параметров функции передается целочисленный дескриптор файла и та переменная, в которую будет записан прочитанный блок информации из файла. Соответственно, функция ничего не возвращает.
  • inputBox. Функция отображает диалоговое окно с одним полем для ввода пользователем текстовых данных. В качестве обязательного параметра функции передается строка текста, которая будет отображена в данном диалоговом окне. Функция возвращает введенный пользователем текст как строку, т. е. используется тип string. Естественно, в приложениях ASP.NET данная функция не понадобится.
  • inputstring. Функция читает строку из файла, открытого в режиме input или Binary. В качестве параметров функции передаются целочисленный дескриптор файла, из которого будет осуществляться чтение, и количество читаемых символов, тоже представляемое как значение типа integer. Функция возвращает значение типа string, т. е. прочитанную строку заданной длины.
  • instr. Функция возвращает целочисленное значение, указывающее, с какой позиции одна строка входит в качестве подмножества в другую строку. В качестве первого параметра функции передается целое число, указывающее позицию в основной строке, откуда следует начинать сравнение, вторым параметром является та самая строка, в которой мы ищем вхождение подстроки, третьим параметром передается строка, которую мы ищем в исходной строке. inStrRev. Эта функция, как и предыдущая, возвращает позицию, с которой одна строка входит в другую, но при этом поиск и сравнение производятся с правого конца искомой строки. Впрочем, в качестве третьего параметра так же можно передать целое число, устанавливающее позицию, с которой будут производиться поиск и сравнение. Естественно, позиция в данном случае отсчитывается от правого края искомой строки.
  • int. Отбрасывает дробную часть переданного в качестве параметра числа, приводя его к целому. Сходна с функцией Fix. Разница проявляется в обработке отрицательных значений. Функция int приводит значение параметра к меньшему целому числу, а именно, значение —5,5 будет преобразовано данной функцией в —6.
  • isArray. Проверяет, является ли переданный ей параметр массивом. Если параметр действительно является массивом, функция возвращает значение True. В ином случае функция возвращает значение False.
  • isDate. Проверяет, может ли переданный функции параметр быть преобразован в дату. Точнее, в значение типа Date. Функция возвращает логическое значение типа Boolean.
  • isError. Функция получает в качестве параметра некое выражение или переменную с данным выражением. В том случае, если выполнение данного выражения создаст нештатную ситуацию, ошибку, которая возбудит соответствующее исключение, функция вернет булево значение True. Во всех иных случаях возвращается значение False.
  • isNothing. В качестве параметра функции передается некая переменная. В том случае, если данной переменной не присвоено какое-либо значение, т. е. она не инициализирована, функция возвращает логическое значение True. Иначе будет возвращено значение False.
  • isNumeric. Функция проверяет, может ли быть переданное в качестве параметра значение преобразовано к какому-либо числовому типу. В тех случаях, когда это возможно, функция возвращает значение True. Иначе будет возвращено значение False.
  • Join. В качестве обязательного параметра функции передается массив строк. Сама функция объединяет все строки из массива в одну и возвращает эту большую строку в качестве результата своей работы. Вторым параметром может быть передана строка или символ, которые будут разделять строки из отдельных элементов массива. По умолчанию в качестве разделителя используется обычный пробел. Однако если принудительно в качестве разделителя задать пустую строку, то элементы строчного массива не будут отделены друг от друга.
  • Kin. Функция принудительно удаляет файл, путь к которому передан функции в качестве параметра, с диска системы пользователя.
  • Lease. Функция переводит строку или символ, переданные ей в качестве параметра, в нижний регистр символов.
  • Left. В качестве параметров функция получает строку и целое число, обозначающее количество символов. Результатом работы функции будет строка, содержащая искомое количество символов, которые скопированы у исходной строки, начиная с ее первого символа, т. е. функция возвращает подстроку первого параметра, которая начинается с его левого края.
  • Len. В качестве параметра функция принимает значения всех числовых и строчных типов. Функцией возвращается длина в символах строчного представления переданного параметра.
  • Lineinput. Читает одну строку из файла, открытого для чтения. В качестве параметра функции передается целочисленный дескриптор файла, из которого будет производиться чтение. Функция возвращает значение типа String.
  • loc. Функция возвращает позицию, с которой будет производиться запись или чтение в открытом файле. Соответственно, возвращаемое значение имеет тип Long. В качестве параметра функции передается целочисленный дескриптор искомого файла.
  • Lock. Закрывает файл для других процессов. Обычно применяется в тех случаях, когда необходимо произвести запись в файл, и необходимо, чтобы во время записи иные приложения и процессы не изменяли содержимое файла. После завершения работы критического участка, блокировка с файла обычно снимается. В качестве параметра функция принимает целочисленный дескриптор блокируемого файла.
  • lof. Функция возвращает значение типа Long, в котором содержится объем открытого для доступа файла в байтах. Функция может применяться для измерения длин только открытых файлов. Соответственно, в качестве параметра в функцию передается целочисленный дескриптор файла.
  • LSet. Функции передается в качестве параметров строка и целое число. Функция возвращает строку, которая является подстрокой первого параметра. Длина подстроки определена вторым параметром-числом. При этом подстрока составляется начиная с левого края строки-параметра.
  • LTrim. В качестве параметра функции передается строка. Функция обрезает пробелы в начале переданной строки, если таковые есть, и возвращает строку без начальных пробелов.
  • Mid. В качестве параметра функции передается строка. Функция возвращает подстроку, опираясь на второй и третий параметры, являющиеся целыми числами. Второй параметр обозначает позицию символа исходной строки, начиная с которого будет создаваться возвращаемая строка. Третий параметр является длиной возвращаемой подстроки.
  • Minute. Функция выделяет минуты из параметра функции, имеющего тип DateTime. Возвращаемое значение имеет тип integer и находится в промежутке от нуля до пятидесяти девяти.
  • П MkDir. Функция создает каталог, полное наименование которого передается ей в качестве параметра.
  • Month. Функция выделяет номер месяца из даты, переданной в качестве параметра. Параметр, естественно, имеет значение DateTime. Возвращаемое значение имеет тип integer и находится в промежутке от единицы до двенадцати.
  • MonthName. Функция возвращает строку с наименованием месяца, порядковый номер которого передан ей в качестве параметра. Данный параметр должен быть целочисленным и находится в промежутке от единицы до двенадцати. В ином случае будет возвращена пустая строка.
  • MsgBox. Функция отображает диалоговое окно. Текст сообщения диалогового окна передается в качестве параметра типа string. Естественно, в приложениях ASP.NET данная функция не используется.
  • Oct. Возвращает строку, в которой записано представление целого числа в восьмеричной системе исчисления, переданного функции в качестве параметра. Параметр может иметь любой целочисленный тип, от Byte до Long. Также может быть передан параметр типа object, но в этом случае ответственность за передачу правильного значения перекладывается на разработчика. В том случае, если передано не целое число, параметр будет округлен до ближайшего целого.
  • Print. Записывает одну или несколько строк в файл, открытый для записи. В качестве параметра функции передается целочисленный дескриптор файла и список записываемых строк, разделенных запятыми.
  • Printline. Фактически идентична предыдущей функции, но при записи строк в файл добавляет к каждой строке символы перевода каретки, что позволяет более корректно отображать записанные ранее строки в текстовых контейнерах.
  • QBColor. Функция принимает в качестве параметра целочисленное значение от нуля до пятнадцати, ассоциирует с ним один из шестнадцати стандартных цветов WWW и возвращает целое число, соответствующее RGB-коду этого цвета.
  • Rename. Функция переименовывает файл или каталог. В качестве первого параметра функции передается строка, содержащая текущее имя искомого файла или каталога, а второй параметр содержит строку с новым именем.
  • Replace. Функция находит в строке, переданной как параметр, некую подстроку и меняет ее на другую заданную последовательность символов.

    Первым параметром передается искомая строка, в которой будет производиться поиск и замена. Второй параметр — подстрока, которую будет необходимо заменить. Третий параметр содержит строку, которой будет заменяться найденная подстрока.

    Глава 13. Тонкости хранения данных: массивы и коллекции.

    Глава 13. Тонкости хранения данных: массивы и коллекции.

    Использование массивов для управления наборами элементов одного и того же типа

    Объект Collection как альтернатива массивам

    Создание своих собственных типов данных для работы с информацией, состоящей из родственных данных различных типов

    К этому моменту вы должны чувствовать себя уверенно при работе с переменными хранящими данные любых типов, — от обычных чисел и строк текста до сложных, имеющих мощный потенциал, объектов. Но бывает, что ни один из встроенных типов данных VBA разработчика не устраивает. Часто необходимо работать с некоторым набором однотипных данных как с единым целым. В таких случаях используются массивы — структурированные боксы для хранения множеств элементов данных одинакового типа.

    Работать с множествами элементов различных типов позволяют объекты Collection (коллекции), которые создаются на основе соответствующего встроенного класса VBA, При некоторых ограничениях использование коллекций бывает целесообразнее, чем применение массивов.

    Иногда удобнее создать свой собственный пользовательский тип данных. Как и переменные, пользовательские типы данных упрощают восприятие программного кода и позволяют обращаться к отдельным, но родственным в некотором смысле, элементам как к частям единого целого. Но массив данных пользовательского типа оказывается еще удобнее, если приходится иметь дело с группами сложных составных наборов информации.

    Знакомство с массивами

    Предположим, у вас есть набор чисел, представляющих цены, оценки за экзамен, расстояния от Земли до каких-то астрономических объектов или нечто другое. Представьте себе, что вы печатаете этот набор чисел в виде списка на листе бумаги, каждое число — в отдельной строке. То, что у вас получится, можно назвать простым массивом. Например:

    Гарантированно выигрышные лотерейные номера

    В списках, подобных этому, отдельные элементы имеют вполне определенные значения, но не имеют специальных идентификационных пометок. Если нужно, чтобы на один из элементов списка обратил внимание кто-то другой, вам придется сказать приблизительно следующее: «Это третий элемент в списке лотерейных номеров». Примерно так же VBA работает с массивами.

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

    Каждый массив в VBA имеет имя, т.е. аналог заголовка списка на листе бумаги. Чтобы работать с отдельным элементом массива, нужно сослаться на него по имени массива и индексу — целому числу, соответствующему месту элемента в массиве. Например, выражение intLottoArray ( 3 ) ссылается на третий (или четвертый, в зависимости от системы нумерации) элемент массива с именем intLottoArray. Как вы, наверное, догадались, intв начале имени массива говорит о том, что в этом массиве предполагается хранить целые значения. Поэтому можно утверждать, что данные, хранящиеся в intLottoArray (3), представляют собой целое число.

    Массивы и коллекции в visual basic net

    Not all variables in an object module can be declared as Public. However, procedures are Public by default, and Property procedures can be used to simulate variables syntactically. This error has the following causes and solutions:

    You declared a Public constant in an object module.
    Although you can’t declare a Public constant in an object module, you can create a Property Get procedure with the same name. If you don’t create a Property Let or Property Set procedure with that name, you are in effect creating a read-only property that can be used the same way you would use a constant.

    You declared a Public fixed-length string in an object module.
    You can simulate fixed-length strings with a set of Property procedures that either truncate the string data when it exceeds the permitted length, or notify the user that the length has been exceeded.

    You declared a Public array in an object module.
    Although a procedure can’t return an array, it can return a Variant that contains an array. To simulate a Public array in a class module, use a set of Property procedures that accept and return a Variant containing an array.

    You placed a Declare statement in an object module.
    Declare statements are implicitly public. Precede the Declare statement with the Private keyword.

    Илон Маск рекомендует:  Что такое код swfdisplayitem &#62;setdepth
  • Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL