VBA, MS Access MS Access в примерах

Поиск и Замена в строке

Встроенная функция от MS:
Replace (Expression,Find,Replace[,Start[,Count[,Compare]]])

Без доп. аргументов производит поиск и замену всех вхождений искомого на заданный текст.
Аргументы:
    Expression — Обязательный аргумент = исходная строка, в которой требуется замена
    Find — Обязательный аргумент = текст котор. нужно заменить
    Replace — Обязательный аргумент = на что заменить
    Start — Необязательный аргумент = указывает позицию начала поиска
    Count — Необязательный аргумент = указывает число замен (по умолч= -1 т.е. ВСЕ ВХОЖДЕНИЯ)
    Compare — Необязательный аргумент = способ сравнения (Binary | Text)

Replace("СТРОКА В КОТОРОЙ ИЩЕМ И МЕНЯЕМ", "что меняем", "на что меняем")

Подробности: https://msdn.microsoft.com/ru-ru/library/bt3szac5%28v=vs.90%29.aspx

Дополнение от Capi:
Функция работает правильно только, если количество дублей в группе отвечает определенному условию:
(K\3 + K Mod 3) Mod 2 < 3, где K - количество дублей в группе.
То есть, только при K = 1, 2, 3, 4 и 6 получаем желаемый результат.
Я делаю так:

Function FuncReplace(S As String, L As String) As String
 Do Until Len(S) = Len(Replace(S, L & L, L))
  S = Replace(S, L & L, L)
 Loop
 FuncReplace = S
End Function


Рукописный вариант (в 2 раза медленние):
Заменяет в строке strString все вхождения строки strFind на строку strReplace

Public Function ReplaceInStr(strString As String, strFind As String, strReplace As String) As String
'es 27.07.2012
'Поиск и замена в тексте - Возвращает модифицированный текст ...
'--------------------------------------------------------------------------
'Аргументы
'   strString  = Тект
'   strFind    = Что Ищем
'   strReplace = На что меняем
'--------------------------------------------------------------------------
Dim strFirst As String, strLast As String, strOut As String, intPos As Long
On Error GoTo ReplaceInStrErr
    strOut = strString
    If strFind = "" Then GoTo ReplaceInStrBye
    If strFind = strReplace Then GoTo ReplaceInStrBye
    intPos = InStr(strOut, strFind)
    Do Until intPos = 0
        strFirst = Mid$(strOut, 1, intPos - 1)
        strLast = Mid$(strOut, intPos + Len(strFind))
        strOut = strFirst & strReplace & strLast
        intPos = InStr(intPos + Len(strReplace), strOut, strFind)
    Loop
ReplaceInStrBye:
    ReplaceInStr = strOut
    Exit Function
ReplaceInStrErr:
    'MsgBox "Error " & Err.Number & " (" & Err.Description & ")" & vbCrLf & _
    "in procedure ReplaceInStr of Module modBuildInField", vbCritical, "Error!"
    Err.Clear
    strOut = strString 'Отмена
    Resume ReplaceInStrBye
End Function

Назад ToTop
L.E. 22.12.2017
Рейтинг@Mail.ru