Основы офисного программирования и язык VBA


Замена, основанная на шаблоне. Функция 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.

Параметры этой функции имеют тот же смысл, что и для стандартной функции 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***




Начало  Назад  Вперед