Функция InStrRev - поиск последнего вхождения подстроки — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Функция InStrRev - поиск последнего вхождения подстроки

2020-08-21 41
Функция InStrRev - поиск последнего вхождения подстроки 0.00 из 5.00 0 оценок
Заказать работу

Функция InStrRev симметрично дополняет функцию InStr, аналогично тому, как функция Right дополняет функцию Left. Эта функция ищет вхождение подстроки в строку, но начинает свою работу с правого конца строки. Ее использование может существенно ускорить работу, если заранее известно, что искомая подстрока находится где-то в конце строки-источника. Если вхождение искомой подстроки единственно, то обе функции дают один и тот же результат. При множественном вхождении функция InStr возвращает первое вхождение, в то время как InStrRev - последнее. Ее синтаксис:

InstrRev(stringcheck, stringmatch[, start[, compare]])

Ее параметры имеют тот же смысл, что и у функции InStr, но порядок их задания изменен. Необязательный параметр Start задается третьим по счету. Когда он опущен, то, по умолчанию, его значение равно "-1", и поиск начинается с последнего символа. Если вернуться к последнему примеру, то для решения нашей содержательной задачи требовалось определить первое и последнее вхождение символа "\" в строке, задающей путь к файлу. Поэтому обе функции были весьма кстати. Нужно отметить, что это весьма типичная ситуация при разборах текста.

Функция 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)

Удаление подстроки

Удаление вхождений подстроки в строку также является одной из основных операций над строками. Хотя специальной встроенной функции DelStr не появилось, но написать ее реализацию, имея Replace, совсем просто. Удалить подстроку эквивалентно замене ее пустой подстрокой. Вот текст, написанной нами функции DelStr:

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

          Optional ByVal start As Long = 1, Optional ByVal count As Long = -1, _

          Optional ByVal compare As VbCompareMethod = vbBinaryCompare)

       

   'Вызов функции MyReplace с пустой строкой для замены

   DelStr = MyReplace(Expr, find, "", start, count, compare)

End Function

 

Приведем результаты ее вызовов в окне отладки:

? DelStr("T* + U** - V*","*")

T + U - V

? DelStr("T* + U** - V*","*",5)

T* + U - V

? DelStr("T* + U** - V*","*",5,1)

T* + U* - V*

Заметьте, при определении DelStr мы предпочли пользоваться собственной модификацией MyReplace, поскольку, как нам кажется, она в большей степени отвечает сути дела.


Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.