это похоже на то, что должно быть очень легко сделать, но это не так - это, конечно, не очевидно, как это сделать, во всяком случае.
Я хочу написать функцию в 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 объекты.
я мог бы написать цикл while вокруг search.SearchForware и сделать замену сам, используя Mid() оператор-но тогда я бы ограничился заменой фиксированными строками (без обратных ссылок или &, если только я не реализовал их сам. in Basic).
так:
- установка
opts.replaceStringна самом деле DO что-нибудь? - если это так:
- что она делает?
- где / как получить результат того, что он делает?
Примечание: этот вопрос о Программирование в Libre Office Basic возвращает измененную строку, а имеет ничего все для поиска и замены ячеек с помощью пользовательского интерфейса Libre Office Calc.
Komp






















