Это кажется чем-то, что должно быть чрезвычайно легко сделать, но это не так - в любом случае, конечно, не очевидно, как это сделать.
Я хочу написать функцию в LibreOffice Basic, которая принимает строку, шаблон поиска регулярного выражения и строку замены и возвращает строку, измененную поиском и заменой регулярного выражения. Как s/search/replace/g
в sed или perl.
После нескольких часов попыток разобраться в ужасной документации, вот что у меня есть:
Function ReSub (T as String, S as String, R as String) As String
Dim result as String
' In other languages, this is trivially easy. perl has an s/// operator,
' and most other languages have a function call. e.g.
'
' perl: $result = ($T =~ s/$S/$R/g);
' python: result = re.sub(S,R,T)
search = CreateUnoService("com.sun.star.util.TextSearch")
opts = CreateUnoStruct("com.sun.star.util.SearchOptions")
opts.algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP
opts.searchString = S
opts.replaceString = R
search.setOptions(opts)
found = search.searchForward(T, 0, Len(T))
' result = ??????????????
ReSub = result
End Function
Выполнение этого в IDE показывает, что все работает нормально, но я понятия не имею, откуда взять полученную измененную строку. T
не изменяется напрямую, и он не находится ни в одном из found
, search
или opts
объектов.
Я мог бы написать цикл search.SearchForware
и выполните подстановку самостоятельно, используя оператор Mid()
но тогда я буду ограничен заменой на фиксированные строки (без обратных ссылок или &
, если я сам не реализовал их в Basic).
Так:
- действительно ли установка
opts.replaceString
ДЕЛАЕТ что-нибудь? - Если так:
- Что это делает?
- где / как я могу получить результат того, что он делает?
Примечание: этот вопрос касается программирования в Libre Office Basic для возврата измененной строки и не имеет никакого отношения к выполнению поиска и замены в ячейках с помощью пользовательского интерфейса Libre Office Calc.