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

Несколько модификаций встроенных функций

Какие бы новые возможности не появлялись в системе, программист всегда будет создавать свой собственный инструментарий, расширяющий стандартные возможности. В предыдущих разделах мы уже приводили разработанные нами функции MyReplace, DelStr, являющиеся частью такого инструментария. Сейчас мы хотим привести еще несколько функций из нашего инструментального набора. Их приведение полезно и по той причине, что эти функции используют новые средства разбора строк. Мы приведем вариации стандартных функций Replace, Filter и Split.

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

Замена, основанная на шаблоне. Функция WildReplace

Важным частным случаем, когда легко реализовать замену, основанную на шаблоне, представляют строки, допускающие разбор их на элементы. В этом случае алгоритм замены понятен, - строка разбирается на элементы, используя новые возможности, предоставляемые функцией Split; затем к каждому элементу применяется операция Like для сравнения с шаблоном; на последнем шаге применяется Join для восстановления строки. Приведем текст нашей функции:

Public Function WildReplace(ByVal expr As String, ByVal find As String, _

ByVal Rep As String, Optional ByVal delimiter As String = " ") As String

'Эта функция применима в том частном случае, когда строка - источник,

заданная аргументом Expr

'представляет совокупность элементов, отделяемых разделителями.

'Типичный пример - строка представляет совокупность слов, разделенных

пробелами.

'Как и обычная функция Replace эта функция производит замену вхождений

элемента (подстроки) новым значением

'Отличие от стандартной функции состоит в том, что заменяемый элемент

(подстрока) find

'задается шаблоном. В результате разные элементы могут быть заменены на

новое значение.

'Для этого частного случая WildReplace существенно расширяет стандартные

возможности Replace

'Алгоритм основан на том факте, что строка допускает разбор ее на элементы,

'а к элементам применима операция Like - сравнения с шаблоном.

Dim Words() As String, i As Long, Res As String

'Разбор строки на элементы

Words = Split(expr, delimiter)

'Сравнение элементов с шаблоном и замена в случае совпадения

For i = LBound(Words) To UBound(Words)

If Words(i) Like find Then Words(i) = Rep

Next i

'Сборка строки

Res = Join(Words, delimiter)

WildReplace = Res

End Function

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

Параметры этой функции имеют тот же смысл, что и для стандартной функции Replace. Существенное отличие состоит в том, что специальные символы шаблона допустимы в строке поиска find. Приведем теперь тестовую процедуру, осуществляющую вызов функции WildReplace:

Public Sub testWildReplace()

Dim Inf As String, SecretInf As String

Inf = "Agent001, Agent007, Агент Майор Пронин, Agent008"

SecretInf = WildReplace(Inf, "Agent###", "Agent***", ", ")

Debug.Print SecretInf

End Sub

Вот результаты ее работы:

Agent***, Agent***, Агент Майор Пронин, Agent***