MyTetra Share
Делитесь знаниями!
Поиск и Замена в строке
19.07.2018
19:36
Раздел: VBA - Access - msa.polarcom.ru - 13 Преобразование Строк


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

Встроенная функция от 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




Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования