Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 2....doc
Скачиваний:
79
Добавлен:
17.12.2018
Размер:
1.62 Mб
Скачать

Работа со строками

Работать с текстами программисту, как правило, приходится значительно чаще, чем работать с числами. Поэтому следует хорошо представлять основные базисные операции над строками, которые в большинстве случаев реализуются с помощью встроенных функций. Заметим, что в VBA Office 2000 добавлены новые операции над строками, расширяющие возможности эффективной работы по преобразованию текста.

Сравнение строк

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

  • Если эта опция установлена как Text, то сравнение на "больше - меньше" представляет лексикографическое сравнение, когда строки сравниваются по их расположению в словаре. Заметьте, это сравнение не чувствительно к регистру, так что большие и малые буквы не различаются. Программисты, конечно, понимают, что сравнение строк означает сравнение кодов их символов, так что лексикографический порядок определяется кодировкой символов алфавита.

  • Если эта опция установлена как Binary, то сравнение идет побитно. В этом случае сравнение естественно, чувствительно к регистру.

  • При работе со строками в Access по умолчанию применяется сортировка, заданная на строках базы данных Access. Заметьте, при создании модуля в Access по умолчанию вставляется опция Option Compare Database. Конечно, эта опция применима только при работе в Access.

Если нужно локально переопределить вид сравнения, заданный опцией для всего модуля, то можно использовать встроенную функцию StrComp, которая возвращает результат сравнения строк. Ее синтаксис:

StrComp(string1, string2[, compare])

Аргументы string1 и string2 - сравниваемые строки. Необязательный аргумент compare указывает способ сравнения строк: значение по умолчанию 0 используется, чтобы выполнить двоичное сравнение, 1 задает посимвольное сравнение без учета регистра.

Если string1 меньше чем string2, то результат равен -1, если строки равны, то - 0, если вторая меньше, то - 1, если хоть одна из строк имеет значение Null, то результат также равен Null.

Сравнение с образцом

Мощным и весьма полезным средством при работе с текстами является операция Like, задающая сравнение с образцом. Необходимость нахождения в наборе всех строк, удовлетворяющих некоторому шаблону (образцу), возникает в самых разнообразных задачах. VBA позволяет решать ее в одну операцию. Приведем таблицу специальных символов, допустимых при задании образца.

Таблица 8.2. Специальные символы, используемые при задании шаблона

Символы

Интерпретация

Примеры

*

Любой текст - произвольное число символов

Шаблону Agent* соответствуют все тексты, начинающиеся со слова Agent. Строки Agent007 и Agent Майор Пронин удовлетворяют шаблону.

?

Один любой символ

Шаблону К?к удовлетворяют, в частности строки Кок и Кук.

#

Любая цифра от 0 до 9

Шаблону Agent### соотвествуют 1000 различных строк, среди которых и Agent007, но, конечно же, не Agent Майор Пронин.

[множество_символов]

Любой символ, принадлежащий множеству

Задать множество можно с помощью перечисления и интервалов. Шаблону К[аоу]к удовлетворяют слова "Как", "Кок", "Кук". Чувствительность к регистру зависит от установки опции Option Compare.

[!множество_символов]

Любой не принадлежащий множеству символ

Шаблону [!а-я] удовлетворяет символ, не являющийся буквой русского алфавита.

Приведем пример работы с операцией Like:

Public Sub LikeOperation()

Const pat1 = "[A-Z]"

Const pat2 = "[a-z]"

Const pat3 = "[!a-z]"

Const pat4 = "[3-5]"

Dim res As Byte

Dim Sym As String

res = "Кук" Like "К[аоу]к"

Debug.Print res

res = "f" Like pat1

Debug.Print res

res = "f" Like pat2

Debug.Print res

res = "f" Like pat3

Debug.Print res

res = "5" Like pat4

Debug.Print res

Sym = "3"

res = Sym Like pat1 & pat4

Debug.Print res

res = Sym Like pat1 Or Sym Like pat4

Debug.Print res

End Sub

Пример 8.1. (html, txt)

Вот результаты отладочной печати:

255

0

255

0

255

0

255

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