Понедельник, 06.05.2024, 10:59
Приветствую Вас Гость | RSS
Категории раздела
Вход на сайт
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

MS Access - разработка баз под заказ

Каталог статей


FAQ: Особенности функции Replace

На написание этой статьи меня натолкнул пользователь Панург с сайта SQL.RU.

Сначала дадим определение функции Replace по справочнику.

Назначение функции Replace
Возвращает строку, в которой указанная подстрока заданное число раз заменена другой подстрокой.

Replace( _
 ByVal Expression As String, _
 ByVal Find As String, _
 ByVal Replacement As String, _
 Optional ByVal Start As Integer = 1, _
 Optional ByVal Count As Integer = -1, _
 Optional ByVal Compare As vbCompareMethod = vbBinaryCompare _
) As String


Параметры

Expression - Обязательный параметр. Строковое выражение, содержащее замещаемую подстроку.
Find - Обязательный параметр. Подстрока, которую требуется найти.
Replacement - Обязательный параметр. Подстрока для замены.
Start - Необязательный параметр. Позиция внутри строки Expression, с которой начинается поиск подстроки. Если этот аргумент опущен, используется значение 1.
Count - Необязательный параметр. Число выполняемых замен подстроки. Если этот аргумент опущен, по умолчанию принимается значение –1, указывающее, что следует произвести все возможные замены.
Compare - Необязательный параметр. Числовое значение, которое указывает вид сравнения, выполняемого при оценке подстрок. Возможные значения см. в разделе "Параметры".

Аргумент Compare может принимать следующие значения:

vbBinaryCompare - Выполняется двоичное сравнение.
vbTextCompare - Выполняется текстовое сравнение.
vbDatabaseCompare - - используется только в Microsoft Access, задает сравнение строк на основе порядка сортировки, определяемого национальной настройкой базы данных

Функция Replace возвращает следующие значения.

Если Find имеет нулевую длину или Nothing - копия Expression
Если Replace имеет нулевую длину - копия Expression без вхождений Find
Если Expression либо имеет нулевую длину, либо значение Nothing - Nothing
Если значение Start больше длины выражения Expression - Nothing
Если Count равно 0 - копия Expression

Исключения

Значение параметра Count < -1 или Start <= 0 вызывает Err 5 - Вызов процедуры или аргумент не является допустимым

А теперь главное! То о чём не пишут в справочниках!

Значение, возвращаемое функцией Replace является строкой, которая начинается с позиции, указанной параметром Start, и завершается в конце строки Expression, с заменой подстрок Find значениями Replace.

Это предложение находится в конце описания функции Replace под скромным заголовком Заметки

Это совсем не то (или не совсем то), что мы ожидаем прочитав описание функции.

Темой обсуждения послужил следующий код Панурга

Replace ("1011112", "1", "2", 5, 1)

выдаёт 212, а надо 1011212

В результате обсуждения я написал свою функцию Replace

'----------------------------------------------------------------------------
' Procedure : fnReplace
' Author : Sonnih
' Date : 26.12.2016
' Purpose : Подмена стандартной функции Replace
'----------------------------------------------------------------------------
'
Public Function fnReplace(ByVal Expression, ByVal Find, ByVal Replacement, _
 Optional ByVal Start As Integer = 1, _
  Optional ByVal Count As Integer = -1, _
 Optional ByVal Compare As VbCompareMethod = vbBinaryCompare) _
  As String

 On Error GoTo fnReplace_Error

 If IsNull(Expression) Then
 fnReplace = ""
 Exit Function
 End If

 If IsNull(Find) Then
 fnReplace = Expression
 Exit Function
 End If
 
 If IsNull(Replacement) Then
 fnReplace = Expression
 Exit Function
 End If

 If Len(Expression) < Start Then
 fnReplace = Expression
 Exit Function
 End If
 
 If Count < -1 Then
 fnReplace = Expression
 Exit Function
 End If
 
 If Start <= 1 Then
 fnReplace = Replace(Expression, Find, Replacement, Start, Count, _
  CompareMethod)
 Exit Function
 End If
 
 If Start > 1 Then
 fnReplace = Left(Expression, Start - 1) & _
  Replace(Expression, Find, Replacement, _
  Start, Count, CompareMethod)
 Exit Function
 End If
 
 On Error GoTo 0
 Exit Function

fnReplace_Error:

 MsgBox "Error " & Err.Number & " (" & Err.Description & _
  ") in procedure fnReplace"

End Function



Ссылка на описание функции в SDN - https://msdn.microsoft.com/ru-ru/library/bt3szac5(v=vs.90).aspx
Ссылка на топик из которого родилась эта статья - http://www.sql.ru/forum/1243319/zamena-simvola-v-stroke

Категория: Мои статьи | Добавил: sonni-dim (10.07.2019)
Просмотров: 188 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar