Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.10.2020
Просмотров: 7906
Скачиваний: 25

Данные, вводимые пользователем в интерактивном режиме, обычно представлены
в виде строк. В ваше распоряжение предоставлена весьма обширная библиотека пре-
допределенных функций и процедур, предназначенных для обработки строк. Впрочем,
несмотря на столь впечатляющие (поверьте мне) возможности, конкретные задачи
могут потребовать от вас реализации новых дополнительных средств.
В этом разделе будет рассказано, как пользоваться существующими функциями
обработки строк и на их основе создавать новые.
Взаимное преобразование строк и чисел
Функции
и
предназначены для преобразования чисел в строки и
строк в числа соответственно. Так выглядит синтаксис функции Str:
Число }
Аргумент Число — это любое числовое литеральное значение или выра-
жение. В качестве параметра функция Str принимает число, а возвраща-
строку цифр и символов, составляющих это число.
Функция Val выполняет обратную операцию. Val получает строку чи-
словых символов, а возвращает числовое значение. Синтаксис функции
Val приведен ниже.
S
Строка )
Аргумент Строка представляет собой последовательность символов, до-
пустимых в записи числа. Вот несколько примеров:
"1234"
Строчная е или прописная Е служат для представления чисел в экспоненциальной
нотации. Все другие символы считаются недопустимыми и игнорируются. Так, на-
пример, результатом вычисления выражения Val ( "1313 Etc" ) будет число 1313.
Листинг
несколько примеров использования функций str и Val.
Листинг
Примеры использования функций Str и Val
1 Sub
)
2
L As Long
3 Dim D As Double
4 D =
)
5
D
L =
)
7
L
8 Dim S As String
9 Dim Т As String
10:
S = Str( D )
11:
S
Т =
L )
Т
14:
Т )
15:
Т
16: End Sub
180
Часть III. Использование ресурсов Access

Рассмотренные примеры преобразований очевидны. Команда в строке 14
I с помощью функции
осуществляет в окне Immediate вывод
строки, содержащей наименование типа переменной Т. (Напомним, что
команда Debug. Print отображает содержимое своего аргумента-
выражения в окне Immediate.) Результат вычисления процедуры
представлен на рис. 10.1. Обратите внимание: вместо ожидаемого
итога выполнения строки 4
на экране отображается равноцен-
ное, но упрощенное число 1е+35, а команда строки 7 выводит число 3,
поскольку символ i при преобразовании отбрасывается.
i [
As
D As
D - Val
D
I
5 As
Т As String
S -
S
Т -
Т
Debug.
Т
End
|
выглядят результаты преобразований с помощью функций Val и Str в
окне Immediate
Строковые функции двойного назначения
В табл.
перечислены функции, которые реализованы в двух версиях. Если имя
завершается символом доллара ($), она возвращает значение типа String;
если нет — результатом будет величина Variant.
Таблица
Строковые функции двойного назначения
Функция
Возвращаемое значение и описание
Chr$(
ChrB$(
Символ
Байт
Строка, содержащая параметры командной строки
10-й час. Как использовать готовые решения
181

Окончание табл. 10.1
Функция
Возвращаемое значение и описание
Dir$(
[,
Error$(
Format$( Выражение [, Формат [,
[,
Нех$( Число)
lnput$( Число,
ЧислоБайтов,
Lcase$( Строка )
Строка,
Строка,
Ltrim$( Строка )
Строка,
[, Чис-
лоСимволов] )
Строка, НачальнаяПозиция
[,
Right$( Строка,
Строка,
Rtrim$(
Space$(
Str$(
String$( ЧислоСимволов,
Time$
Ucase$(
Наименование текущего каталога на указанном диске. Па-
раметр, указывающий букву дисковода, необязателен
Строка, содержащая текущую дату
Наименование первого найденного файла, удовлетворяю-
щего заданным критериям поиска
Сообщение об ошибке, соответствующее указанному но-
меру. Если номер ошибки не задан, возвращается сооб-
щение о последней ошибке
Строка, которая форматируется в соответствии с инструк-
циями, заданными в необязательных аргументах
Заданное число в
системе счисления
Строка, содержащая заданное число символов, которая
считывается из указанного файла
Строка символов, содержащая заданное число байтов, ко-
торая считывается из указанного файла
Строка, алфавитные символы которой преобразованы в
нижний регистр
Левая часть строки, содержащая указанное число символов
Левая часть строки, содержащая указанное число байтов
Строка, в которой удалены ведущие пробелы
Часть строки, содержащая указанное число символов, на-
чиная с заданной позиции
Часть строки, содержащая указанное число байтов, начи-
ная с заданной позиции
Строка, содержащая восьмеричное представление задан-
ного десятичного числа
Правая часть строки, содержащая указанное число симво-
лов
Правая часть строки, содержащая указанное число байтов
Строка, в которой удалены хвостовые пробелы
Строка пробелов заданной длины
Строка, содержащая символьное представление заданно-
го числа
Строка указанных символов заданной длины
Строка, содержащая текущее время
Строка, в которой удалены ведущие и хвостовые пробелы
Строка, алфавитные символы которой преобразованы в
верхний регистр
Например, вызов
Chr ( 65 ) даст
в итоге значение
Variant.
Если же обратиться к
функции Chr$ ( 65
будет возвращена строка
(String),
хотя оба результата равны
символу А.
182
Часть III. Использование ресурсов Access

Значения типа Variant более гибкие и управляемые, но их использование связано
с издержками в виде дополнительного расхода памяти и процессорного времени, по-
применять их следует осмысленно. Если определенный тип значения известен
заранее, оговаривайте его явно.
Функции преобразования типов данных
Функций преобразования типов данных настолько много, что подробно описать их
в этой книге не удастся. Исчерпывающую информацию по данному вопросу можно
найти в справочной системе. Существует множество функций, преобразующих строки
в числовые выражения определенных типов данных. Все они имеют один вид: в
функцию передается единственный аргумент — строка или числовое выражение, а
возвращаемый результат представляет собой числовое значение нужного типа данных.
Ниже приведены некоторые из подобных функций.
• CBool преобразует выражение в значение типа Boolean.
• CByte преобразует выражение в значение типа Byte.
•
преобразует выражение в значение типа Currency.
• CDate преобразует выражение в значение типа Date.
•
преобразует выражение в значение типа Double.
• CDec преобразует выражение в значение типа Decimal.
•
преобразует выражение в значение типа integer.
•
преобразует выражение в значение типа Long.
• CSng преобразует выражение в значение типа single.
• CStr преобразует выражение в значение типа String.
• CVar преобразует выражение в значение типа Variant.
Нельзя объявить переменную типа
Decimal. Для хранения
данных этого типа необходимо объявить переменную типа Variant.
Чтобы преобразовать строку "False" в переменную типа Boolean, используйте
функцию CBool.
Dim В
As
Boolean
В =
Преобразовать строку в значение типа Decimal можно, объявив переменную типа
Variant и использовав функцию CDec.
Dim S As String
Dim D As Variant
D =
D = D * 10000
MsgBox D
Функции преобразования активно применяются программистами, поскольку часто
возникает необходимость предоставлять данные в виде строки (чтобы пользователь
мог их отредактировать), а затем обновленные данные вновь преобразовывать в ис-
ходный тип для выполнения вычислений.
час. Как использовать готовые решения

Поиск строк
В составе VBA имеется функция InStr, предназначенная для поиска по-
следовательностей символов внутри заданной строки. Подобная задача
возникает на практике достаточно часто. Синтаксис обращения к
ции InStr таков:
ГдеИскать, ЧтоИскать [,
)
НачальнаяПозиция — необязательный аргумент, указывающий номер символа, с ко-
торого следует начинать поиск. Этот параметр полезен в том случае, когда искомая по-
следовательность символов может в строке повторяться. Аргумент ГдеИскать задает
строку, в которой будет выполняться поиск, а ЧтоИскать — искомую подстроку. В ка-
честве параметра ОпцияСравнения может задаваться одно из значений предопределен-
ного перечислимого
vbUseCompareOptions, vbBinaryCompare, vbTextCom-
pare или vbDatabaseCompare.
Значение vbUseCompareOptions указывает функции на необходимость использовать
опцию сравнения, установленную командой Option Compare. Режим vbBinaryCom-
pare позволяет осуществлять поиск с учетом регистра символов, a vbTextCompare —
без него.
Если функция InStr возвращает нуль, это значит, что искомая последовательность
символов не найдена. Любое значение возврата, большее нуля, служит сигналом ус-
пешного завершения поиска и указывает на положение начального символа найден-
ной последовательности в исходной строке. Зная позицию подстроки, нетрудно напи-
сать цикл для поиска всех ее вхождений.
Листинг 10.2 демонстрирует отличия между режимами поиска с учетом и без учета ре-
гистра символов, а листинг 10.3 содержит пример процедуры, выполняющей поиск всех
вхождений указанной символьной
в заданную "большую" строку.
Листинг 10.2. Поиск строк с учетом и без учета регистра алфавитных символов
1: Sub
)
2:
3: MsgBox
End Sub
1, "Здравствуй,
1,
Здравствуй,
"Мир", vbBinaryCompare
"Мир", vbTextCompare }
Процедура MsgBox, которая вызывается в строке 2, отображает окно со-
I общения, содержащее результат 0: поиск слова "Мир" в строке
"Здравствуй, мир" завершился неудачей, поскольку с учетом регистра
символов (опция vbBinaryCompare) слова "Мир" и "мир" считаются
различными. Напротив, следующее окно сообщения высветит резуль-
тат 13: без учета регистра (режим vbTextCompare) слова становятся рав-
ноправными.
Листинг
Поиск всех вхождений подстроки
1: Sub
)
2: Const SEARCH_ME = "На дворе — трава, на траве — дрова"
3: Const SEARCH_FOR = "трав"
4:
Р = О
Do While (1=1)
184
Часть III. Использование ресурсов Access