Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Функция Replace - замена всех вхождений подстроки






Позволяет заменить не только первое вхождение искомой подстроки, но и все такие вхождения, не требуя организации цикла. С другой стороны, можно ограничиться только заменой первого или нескольких первых вхождений. Рассмотрим синтаксис появившейся функции:

Replace(expression, find, replace[, start[, count[, compare]]])

Первый аргумент expression задает строковое выражение, результат которого определяет строку-источник, в которой осуществляется замена. Аргументы find и Replace задают заменяемую подстроку и ее новое значение. Аргумент Count определяет число замен. Обычно он равен 1, когда речь идет о замене первого вхождения, или опускается, - в этом случае его значение по умолчанию равно " -1", означающее замену всех вхождений. Аргумент compare имеет обычный смысл.

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

Public Sub Rep()

'Эта процедура преобразует выделенный программный текст

'Заменяя пробелы табуляцией и конец абзаца мягким концом строки

Dim TxtRange As String

 

TxtRange = Selection.Range.Text

'Замена пробелов: 4-х, 3-х и 2-х символом табуляции

TxtRange = Replace(TxtRange, " ", vbTab)

TxtRange = Replace(TxtRange, " ", vbTab)

TxtRange = Replace(TxtRange, " ", vbTab)

 

'Замена концов абзаца

Selection.Range.Text = Replace(TxtRange, VBA.Chr(13), VBA.Chr(11))

End Sub

 

У Replace есть одна особенность, на которую следует обратить внимание, - возвращаемый ею результат, начинается не с первой позиции, а с позиции, заданной аргументом Start. Так что помимо своей основной роли она еще обрубает голову строки, если только Start, отличается от 1. Поскольку замену зачастую нужно производить не с самого начала, а получать хочется полную строку, то мы написали свой вариант этой функции:

Public Function MyReplace(ByVal Expr As String, ByVal find As String, _

ByVal rep As String, Optional ByVal start As Long = 1, Optional

ByVal count As Long = -1, _

Optional ByVal compare As VbCompareMethod = vbBinaryCompare) As String

 

'Вызов стандартной функции Replace

If start = 1 Then

MyReplace = replace(Expr, find, rep, start, count, compare)

Else

MyReplace = VBA.Left(Expr, start - 1) & replace(Expr, find,

rep, start, count, compare)

End If

End Function

 

Вот результаты нескольких вызовов Replace и MyReplace в окне отладки:

? Replace(" A+B *(D*B +B)", " B", " C", 4, 1)

*(D*C +B)

? MyReplace(" A+B *(D*B +B)", " B", " C", 4, 1)

A+B *(D*C +B)

? MyReplace(" A+B *(D*B +B)", " B", " C", 4)

A+B *(D*C +C)






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.