Работа со строками в MS Access
Администратор
Откровенно говоря, возможности для работы со строками в MSA небольшие и приходится писать собственные функции. О них и речь... Поиск последнего символа в строке, например, последней точки в имени файла для определения расширения или последнего слэша в пути к файлу для определения имени файла в пути.
'Вызов функции MsgBox FndSmb(".","main.html") 'Сама функция Public Function FndSmb(smb As String, stroka As String) As Long Dim a As Long Dim b As Long a = 1 While a > 0 b = a a = InStr(a + 1, stroka, smb) Wend FndSmb = b End Function
Замена символа или последовательности символов, чем-то похоже на одноименную функцию в РНР. Пришлось написать, когда возникла необходимость в использовании формул, задаваемых пользователем. Проблема была в том, что внутри кода разделитель мантиссы запятая, а вот для фукнции Eval нужна точка. В итоге получилась гораздо более функциональная вещь. P.S. Начиная с версии 2000 в MSA есть функция replace(). Так что можете пользоваться ею.
'Вызов функции MsgBox str_replace(",",".","9,9*10,17") 'Сама функция Public Function str_replace(s1 As String, s2 As String, s As String) As String Dim n1 As Long Dim n2 As Long Dim v1 As String Dim v2 As String Dim v3 As String
v3 = s n2 = 1 n1 = InStr(n2, s, s1)
If n1 > 0 Then Do v1 = Mid(v3, 1, n1 - 1) v2 = Mid(v3, n1 + Len(s1), Len(v3) - n1) v3 = v1 & s2 & v2 n2 = n1 + Len(s2) n1 = InStr(n2, v3, s1) Loop Until n1 < 1 End If
str_replace = v3 End Function
Более сложная функция для получения элемента из строки с разделителями. Возникла из задачи, когда в одном поле таблицы оказались данные, которые необходимо было разнести по разным столбцам. Опять же в РНР такая функция есть (split), а вот в MSA нет.
'Вызов функции MsgBox ExpandStr("Waw;2347859;dfskgdkf",";",2) '2347859 'Сама функция Public Function ExpandStr(stroka As String, Razdel As String, numpos As Long) Dim n1 As Long Dim s1 As String Dim v1 As String Dim v2 As String Dim v3 As String Dim i As Long
v3 = stroka s1 = Razdel n1 = InStr(1, v3, s1) i = 0
If n1 > 0 Then Do v1 = Mid(v3, 1, n1 - 1) 'возвращает слово до поисковой строки v2 = Mid(v3, n1 + Len(s1), Len(v3) - n1) 'возвращает слово после поисковой строки v3 = v2 'склейка n1 = InStr(1, v3, s1) 'выполняем новый поиск подстроки i = i + 1 Loop Until n1 < 1 Or i >= numpos 'если такой подстроки нет, то обрываем поиск End If If n1 < 1 And i < numpos Then ExpandStr = v2 Else ExpandStr = v1 End If End Function
|