Информатика. 2 семестр. Тема 05. Сложные типы
«Почти-простые» типы данных
Variant ‘Нетипизированный указатель
Object ‘Указатель на объект
String ‘Строка символов
Директива Type задает (декларирует) описание пользовательского типа. В VBA под пользовательским типом понимается структура ( struct в c# ) или запись (record в Delphi).
Пользовательские типы могут «вкладываться» друг в друга
Type extranewtype
element As newtype ‘ «Вложили» описанный ранее тип
* * *
End Type
newtype
element
* * *
newtype
element
* * *
element
* * *
Информатика. 2 семестр. Тема 05. Сложные типы
Главное преимущество использования пользовательских типов – поддержание целостности данных при копировании
Dim Ivanov_fio As String
Dim Ivanov_course As Integer
Dim Ivanov_score As Double
Dim students_fio() As String
Dim students_course() As Integer
Dim students_score() As Double
* * *
Ivanov_fio = “Иванов“
students_score(1) = 5
* * *
students_fio(5) = Ivanov_fio
students_course(5) = Ivanov_course
students_score(5) = Ivanov_score
А если нужно добавить студенту, например, возраст?
Если тип объявлен в нескольких модулях, то используем полное имя типа: ModuleName.TypeName
DefModule
Type student
fio As String
course As Integer
score As Double
End Type
Module1
Dim Ivanov As student
Dim Ivanov As DefModule.student
Если тип с совпадающим именем объявлен также в своём модуле, то его определение экранирует остальные. При необходимости, можно использовать полное имя типа: ModuleName.TypeName
Для статического массива заранее известно количество элементов
usertype
type1
* * *
list
element
* * *
element
element
type2
type3
Type usertype
type1 As String
type2 As Integer
type3 As Double
* * *
End Type
Dim ArrayName(Length) As smthtype
Dim ArrayName() As smthtype
Для динамического массива - количество элементов может меняться
Важно:
Возможно создать многомерный «прямоугольный» массив
Dim Array3(5, 2 To 10) As Integer ‘Определен двумерный массив
Не путать размер и размерность!
Для динамического массива (массива переменного размера):
Dim Array4() As Integer ‘Определен динамический массив
Перед использованием обязательно указать размер и размерность
ReDim Array4(2 To 6, 3) As Integer ‘Настройка массива
При использовании ReDim массив «очищается», но
ReDim Preserve Array4(2 To 6, 5) As Integer ‘Данные сохраняются
Preserve используется только при изменении последнего индекса
Ошибка ‘9’: Subscript out of range
Option Base 2 ‘Установка нижнего индекса «по-умолчанию»
Индексы массива всегда образуют непрерывный ряд целых чисел
Dim Array5 ( 4 ) As Integer ‘Объявлен массив с 3 элементами
Dim Array5 ( 1 To 4 ) As Integer ‘Объявлен массив с 4 элементами
В VBA определены функции для получения граничных индексов
MinIndex = LBound ( ArrayName ) ‘Нижняя граница
MaxIndex = UBound ( ArrayName ) ‘Верхняя граница
N = UBound ( A ): ReDim Preserve A(N + 1): A(N + 1) = X ‘ «на вершину»
Пример: Добавление элемента X «в конец» массива A():
В VBA индекс элемента массива не равен его порядковому номеру
Для строк определены два оператора
str1 = “Hello world!” ‘Присвоение значения
str1 = “Здравствуй, ” & “Мир!” ‘Конкатенация – слияние строк
Последовательность символов образующая строку хранится в памяти как неизменная величина в динамической памяти. Указатель на структуру, образующую строку, обрабатывается средой VBA «прозрачно» для пользователя.
Объявление переменной строкового типа
Функции преобразования типов
str1 = Str ( 100500 ) ‘Получение строкового представления
N = Val (“100500”) ‘Преобразование строки в число (тип Double)
VBA использует для строк кодировку Unicode ( UTF-16LE )
1055 ← AscW ( “Привет” ) ‘ Unicode-код первого символа строки
31 ← AscB ( “Привет” ) ‘ Значение первого байта строки
207 ← Asc ( “Привет” ) ‘ ASCII-код первого символа строки
П ← ChrW ( 1055 ) ‘ Символ по Unicode-коду
Z ← ChrB ( 90 ) ‘ !!! Неполная кодовая единица !!!
П ← Chr ( 207 ) ‘ Символ по ASCII-коду
Можно использовать комбинации
П̅ ← ChrB( 31 ) & ChrB( 4 ) & ChrW( 774 ) ‘ «Надчёркнутое» П (cyrrilic)
Подсчет «длины» строки – функция Len()
L = Len ( “Привет” ) ‘ Число «полных» кодовых единиц в строке
L = LenB ( “Привет” ) ‘ «Устаревшая» функция «длина в байтах»
Число кодовых единиц не равно числу кодовых точек (символов)
«Чистка» от служебных символов и пробелов
Trim (<строка>) ‘ Удаление краевых пробелов (всех)
LTrim (<строка>) ‘ Удаление пробелов слева
RTrim (<строка>) ‘ То же, но справа
Анализ строки (поиск подстрок и замена вхождений)
InStr([<старт>,] < строка1>, <строка2> [,<сравнение>]) ‘ Поиск подстроки
InStrRev( … ) ‘ Поиск подстроки, но с конца
Replace (<строка>, <строкаПоиск>, <строкаЗамена>) ‘ Замена
Задание: Напишите программу обработки CSV:
S = “1; 2; 3; 4” ‘ Загрузить в Dim A() AS String по отдельности
Проверка и сравнение строк
<строка> Like <шаблон> ‘ Сравнить с шаблоном
StrComp (<строка1>, <строка2> [, <метод>]) ‘ Сравнить строки:
‘ Результат = {-1, 0, 1, Null } для { < , = , > , Null }
‘ <метод> = {vbBinaryCompare, vbTextCompare}
Заполнение
String (<длина>, <символ>) ‘ Создать строку из символов
Space (<длина>) ‘ То же, но из пробелов
Очистка буфера, последний элемент , а если нет разделителя?
Split (<строка> [, <разделитель>]) ‘ Разбить строку на подстроки
Join (<массив строк> [, <разделитель>]) ‘ Объединить строки
Filter(<массив строк>, <фрагмент>[, <включение>] [, <сравнение>])
‘ Просмотр массива строк с целью поиска искомой
‘ Возвращает массив подходящих строк
Ничего не упустили?
Что предлагает VBA?
А есть ещё «облака» и коллекции…
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть