- •Создание динамических структур данных
- •Встроенный динамический класс Collection
- •Создание собственных динамических классов
- •Обертывание коллекции vba
- •Несколько слов об api, Win32, dll
- •Вызов функций и оператор Declare
- •Две кодировки ansi и Unicode
- •Два языка: c и vb. Различия при вызове функций
- •Соответствие между простыми типами данных
- •Структуры языка c и тип, определенный пользователем, в языке vba
- •Об описателях языка c и объектах Windows
- •Void функции языка c
- •Вызов аргументов по ссылке ByRef и по значению ByVal
- •Строковые аргументы при вызове функций Win32 api
- •Примеры работы с Win32 api функциями
- •Работа с окнами
- •Характеристики окружения
- •Вызов функций Win32 api, работающих в Unicode кодировке
- •Обработка ошибок, возникающих при вызове функций Win32 api
- •Функции api и вызов Callback функций
- •Функции высших порядков и конструкция AddressOf
- •Функции перечисления Win32 api
- •Функция EnumWindows
- •Еще один пример работы с функцией EnumWindows
- •Функции Win32 api для работы с таймером
- •Функция SetTimer
- •Функция обратного вызова TimerProc
- •Функция KillTimer
- •Пример создания, работы и удаления таймера
- •Классы как обертка вызовов функций Win32 api
- •Построение класса "ВашТаймер"
- •Использование класса ВашТаймер
- •Операторы
- •Операторы и строки
- •Оператор комментария
- •Присваивание
- •Оператор Let
- •Оператор lSet
- •Оператор rSet
- •Оператор Set
- •Управляющие операторы
- •Условный оператор If Then Else End If
- •Оператор выбора Select Case
- •Цикл For Next
- •Цикл Do...Loop
- •Цикл While...Wend
- •Цикл For Each...Next
- •Работа с каталогами, папками и файлами
- •Изменение текущего диска: оператор ChDrive
- •Изменение текущего каталога (папки): оператор ChDir
- •Создание каталога (папки): оператор MkDir
- •Переименование каталогов (папок) и файлов: оператор Name
- •Удаление каталога (папки): оператор RmDir
- •Установка атрибутов файла: оператор SetAttr
- •Копирование файлов: оператор FileCopy
- •Удаление файлов: оператор Kill
- •Прочие операторы
- •Операции с одним объектом. Оператор With
- •Операции
- •Работа с числовыми данными
- •Математические функции
- •Работа со строками
- •Сравнение строк
- •Сравнение с образцом
- •Основные операции над строками
- •Новые функции для работы со строками
- •Функция InStrRev - поиск последнего вхождения подстроки
- •Функция Replace - замена всех вхождений подстроки
- •Удаление подстроки
- •Разбор строки. Функции Split, Join и Filter
- •Преобразование строки в массив. Функция Split
- •Сборка элементов массива в строку. Функция Join
- •Фильтрация элементов массива. Функция Filter
- •Несколько модификаций встроенных функций
- •Замена, основанная на шаблоне. Функция WildReplace
- •Замена разных символов строки. Функция CharSetReplace
- •Фильтрация, основанная на шаблоне. Функция WildFilter
- •Разбор строки, допускающей разные разделители ее элементов. Функция WildSplit
- •Работа с датами и временем
- •Присваивание значений
- •Встроенные функции для работы с датами
- •Определение текущей даты или времени.
- •Вычисления над датами
- •Функция Timer и хронометраж вычислений
- •Некоторые встроенные функции
- •Функции проверки типов данных
- •Преобразование типов данных
- •Форматирование данных. Функции группы Format
- •Функция Format.
- •Другие функции форматирования
- •Описание и создание процедур
- •Классификация процедур
- •Синтаксис процедур и функций
- •Функции с побочным эффектом
- •Создание процедуры
- •Создание процедур обработки событий
- •Вызовы процедур и функций Вызовы процедур Sub
- •Вызовы функций
- •Использование именованных аргументов
- •Аргументы, являющиеся массивами
- •Конструкция ParamArray
- •Задача о медиане
- •Пользовательские функции, принимающие сложный объект Range
- •Рекурсивные процедуры
- •Деревья поиска
- •Класс TreeNode
- •Класс BinTree
- •Работа со словарем
- •Отладка
- •Написание надежных программ
- •Искусство отладки
- •Средства отладки
- •Панель отладки и команды меню
- •Окна наблюдения
- •Окно локальных переменных - Locals
- •Окно проверки - Immediate
- •Окно контрольных выражений - Watch
Сборка элементов массива в строку. Функция Join
Функция Join решает обратную задачу, - она восстанавливает строку по ее элементам, хранящимся в массиве, добавляя разделители в момент их объединения. Ее синтаксис:
Join(sourcearray[, delimiter])
Параметры ее понятны без особых пояснений. Заметим, что если необязательный аргумент delimiter опущен, то элементы разделяются пробелами. В качестве примера, приведем обратную сборку сложного предложения:
Public Sub SplitAndJoin()
'В этой процедуре сложное предложение разделяется на простые
'А затем после обработки строка восстанавливается
'Объявляем динамический массив
Dim Simple() As String, i As Byte
Dim Simple1() As String, Res As String
'Размерность массива Simple устанавливается автоматически
'в соответствии с размерностью массива, возвращаемого функцией Split
Simple = Split("А это пшеница, которая в темном чулане хранится в доме, " _
& "который построил Джек", ", ")
'Создаем новый массив
ReDim Simple1(1 To UBound(Simple) + 2)
Simple1(1) = "А это веселая птица - синица"
Simple1(2) = "которая часто ворует пшеницу"
For i = 3 To UBound(Simple1)
Simple1(i) = Simple(i - 2)
Next i
'Создаем строку из массива Simple1
Res = Join(Simple1, ", ")
Debug.Print Res
End Sub
Вот результат отладочной печати:
А это веселая птица - синица, которая часто ворует пшеницу, которая в темном
чулане хранится в доме, который построил Джек
Фильтрация элементов массива. Функция Filter
Функция Filter является одним из вариантов поиска по образцу среди элементов массива. Здесь не требуется точного совпадения элемента и образца, достаточно, чтобы строка - образец содержалась в строке, заданной элементом массива. Поскольку совпадений может быть достаточно много, то результатом является массив отфильтрованных элементов. Некоторые детали будут пояснены при описании аргументов функции Filter. Вот ее синтаксис:
Filter(sourcearray, match[, include[, compare]])
Ее параметры имеют следующий смысл:
-
sourcearray - одномерный массив, элементы которого являются строками. Он может быть получен, например, как результат расщепления строки в массив.
-
match - образец поиска. Строка, вхождение которой ищется в каждом элементе исходного массива.
-
include - необязательный аргумент булевого типа. По умолчанию имеет значение True, означающее, что элементы, удовлетворяющие образцу, входят в результирующий массив. Если задано значение False, то результирующий массив составляется из элементов, не удовлетворяющих образцу.
-
compare - имеет обычный смысл.
В качестве результата возвращается массив отфильтрованных элементов.
Наш пример будет представлять расширенный вариант уже приводившейся процедуры SplitAndJoin:
Public Sub SplitAndJoin()
'В этой процедуре сложное предложение разделяется на простые
'А затем после обработки строка восстанавливается
'Здесь же демонстрируется фильтрация элементов массива
'Объявляем динамический массив
Dim Simple() As String, i As Byte
Dim Simple1() As String, Res As String
Dim Simple2() As String
'Размерность массива Simple устанавливается автоматически
'в соответствии с размерностью массива, возвращаемого функцией Split
Simple = Split("А это пшеница, которая в темном чулане хранится в доме, " _
& "который построил Джек", ", ")
'Создаем новый массив
ReDim Simple1(1 To UBound(Simple) + 2)
Simple1(1) = "А это веселая птица - синица"
Simple1(2) = "которая часто ворует пшеницу"
For i = 3 To UBound(Simple1)
Simple1(i) = Simple(i - 2)
Next i
'Создаем строку из массива Simple1
Res = Join(Simple1, ", ")
Debug.Print Res
'Фильтрация элементов массива
Simple2 = Filter(Simple1, "котор")
Res = Join(Simple2, ", ")
Debug.Print Res
Simple2 = Filter(Simple1, "котор", False)
Res = Join(Simple2, ", ")
Debug.Print Res
End Sub
Пример 8.3. (html, txt)
Вот результаты отладочной печати:
А это веселая птица - синица, которая часто ворует пшеницу, которая в темном
чулане хранится в доме, который построил Джек
которая часто ворует пшеницу, которая в темном чулане хранится в доме,
который построил Джек
А это веселая птица - синица