Программирование >>  Проектирование интерфейса пользователя 

1 ... 51 52 53 [ 54 ] 55 56 57 ... 153


Поиск строк

В составе VBA имеется функция InStr, предназначенная для поиска последовательностей символов внутри заданной строки. Подобная задача возникает на практике достаточно часто. Синтаксис обращения к функции InStr таков:

InStr( [НачальнаяПозиция,] ОпцияСравнения] )

ГдеИскать, ЧтоИскать

НачальнаяПозиция - необязательный аргумент, указывающий номер символа, с которого следует начинать поиск. Этот параметр полезен в том случае, когда искомая последовательность символов может в строке повторяться. Аргумент ГдеИскать задает строку, в которой будет выполняться поиск, а ЧтоИскать - искомую подстроку. В качестве параметра ОпцияСравнения может задаваться одно из значений предопределенного перечислимого типа- vbUseCompareOptions, vbBinaryCompare, vbTextCom-pare или vbDatabaseCompare.

Значение vbUseCompareOptions указывает функции на необходимость использовать опцию сравнения, установленную командой Option Compare. Режим vbBinaryCom-pare позволяет осуществлять поиск с учетом регистра символов, a vbTextCompare - без него.

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

Листинг 10.2 демонстрирует отличия между режимами поиска с учетом и без учета регистра символов, а листинг 10.3 содержит пример процедуры, выполняющей поиск всех вхожцений указанной символьной последовательности в заданную большую строку.

Листинг 10.2. Поиск строк с учетом и без учета регистра алфавитных символов

1: 4:

Sub )

MsgBox InStr!

MsgBox InStrI

End Sub

1, Здравствуй, мир! 1, Здравствуй, мир!

М , vbBinaryCompare М , vbTextCompare }

Процедура MsgBox, которая вызывается в строке 2, отображает окно со-i общения, содержащее результат 0: поиск слова Мир в строке Здравствуй, мир завершился неудачей, поскольку с учетом регистра символов (опция vbBinaryCompare) слова Мир и мир считаются различными. Напротив, следующее окно сообщения высветит результат 13: без учета регистра (режим vbTextCompare) слова становятся равноправными.

Листинг .3. Поиск всех вхождений подстроки

Const SEARCH ME = Const SEARCH FOR Р = О

Do While (1=1)

На дворе = трав

трава, на траве

дрова



P = InStr(

P + 1, SEARCH ME,

SEARCH FOR, vbTextCompare

If (P = 0)

Then Exit Do

MsgBox

& SEARCH FOR &

найдено ции= & P

Loop

10 :

End Sub

В порядке напоминания отметим: строка 5 содержит заголовок бесконечного цикла, а в строке 7 осуществляется принудительный выход из него в случае отрицательного результата поиска (т.е. цикл прерывается).

Анализ

В цикле цроизводится цоиск без учета регистра алфавитных символов (в I качестве опции сравнения выбрано значение vbTextCompare). Строка трав будет найдена дважды - на позициях 10 и 20, и эти числа будут

отображены в окнах сообщений, открываемых в строке 8.

Динамическое заполнение строк

Функции String и Space позволяют динамически заполнять строковые переменные и при необходимости очищать их. Функция string заносит в переменную заданный символ и повторяет операцию указанное количество раз. Space можно считать частным случаем функции String - она присваивает переменной строку пробелов определенной длины.

Если необходимо заполнить переменную набором одинаковых произвольных символов, применяйте функцию String. Чтобы присвоить переменной строку пробелов

длины п, можно воспользоваться одним из n, ) либо

Space ( п ) - с одинаковым результатом.

Форматирование данных

Как самые простые, так и наиболее сложные операции форматирования могут быть легко выполнены с использованием функции Format и набора специальных символов форматирования - например @, &, <, или >. Синтаксис функции Format таков:

Format ( Строка Формата )

Функция Format требует задания переменной или литерального значения типа string и строки, описывающей формат преобразования. Строка формата может содержать любые литеральные символы в сочетании со специальными знаками. В табл. 10.2 перечислены наиболее употребительные специальные символы форматирования и приведено их описание.

Символы @ и & играют роль шаблонов для представления любого единственного символа. Если строка формата содержит знак @ ил &, он заменяется символом преобразуемой строки, расположенным в той же позиции. Действие команды < аналогично применению функции мзе$, а команда > равносильна функции Ucase$. Листинг 10.4 представляет несколько простых примеров форматирования строк; их легко проверить с помощью средств окна Immediate.



Таблица 10.2. Специальные символы форматирования

Символ

Описание

<

Шаблон единственного символа Шаблон единственного символа Преобразование к нижнему регистру Преобразование к верхнему регистру Преобразование слева направо

Листинг 10.4. Примеры форматирования строк

1: Su tDemo( )

2: MsgBox UcaseS ( test ) = Format ( test , > )

3: MsgBox Lcase$( TEST ) = Format ( TEST , < )

4: MsgBox Format( 5175551212 , (@@@) g@@-@@@@ )

5: End Sub

Анализ

При выполнении строки 2 откроется окно сообщения, содержащее слово True, поскольку левая и правая части логического выражения сравнения аналогичны. Окно, вызываемое в строке 3, также будет отображать слово True. Результат выполнения строки 4 - выражение (517) 555-1212 . Безусловно, это самые простые примеры. Хитроумные комбинации литеральных символов и специальных знаков форматирования могут привести к весьма любопытным результатам. Ваше творчество ограничено только способностью к воображению и, естественно, требованиями конкретной задачи. Единственное общее полезное правило состоит в том, что заниматься форматированием имеет смысл после того, как сделано самое главное - программа правильно решает задачу.

Функции Date и Time

Существует две разновидности функций Date и Time. Date, например, возвращает текущую дату в виде значения типа Date, а функция Date$ служит для представления даты в виде символьной строки. Функции Time и Time$ возвращают значения текущего времени. Величины типа Date хранятся в виде чисел двойной точности.

Если в окне Immediate редактора Microsoft Visual Basic ввести команду Print Date, то результатом будет строка, содержащая значение текущей системной даты (например, введя эту команду 28 июня 2001 г., вы получите 28.0 6.2001). Команда Print Time выводит на экран текущее значение времени - скажем, 15:55:51. Команда Print Now позволяет увидеть одновременно и дату, и время 15:55:51).

Дата и время сохраняются в виде единого числа типа Double: дате соответствует целая часть числа, а времени - дробная. Чтобы просмотреть внутреннее представление даты/времени, введите в окне Immediate команду Print Now / 1, под которой подразумевается неявное преобразование величины в число двойной точности. Дате 28.06.2001 и времени 15:55:51 соответствует число 37019.0441435185. (Целая часть равна количеству дней, прошедших с 1 января 1900 года.)



1 ... 51 52 53 [ 54 ] 55 56 57 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика