Esto parece algo que debería ser extremadamente fácil de hacer, pero no lo es, de todas formas no es obvio cómo hacerlo.
Quiero escribir una función en LibreOffice Basic que toma una cadena, un patrón de búsqueda de expresiones regulares y una cadena de reemplazo, y devuelve la cadena modificada por la búsqueda de expresiones regulares y; reemplazar. Como un s/search/replace/g
en sed o perl.
Después de varias horas tratando de dar sentido a la documentación abismal, esto es lo que tengo:
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
El paso a través de esto en el IDE muestra que esto funciona bien, pero no tengo idea de dónde puedo obtener la cadena modificada resultante. T
no está siendo modificado directamente, y no está en ninguna de las found
, search
o opts
objetos tampoco.
Podría escribir un bucle mientras search.SearchForware
y hago la sustitución yo mismo usando el Mid()
declaración - pero entonces estaría restringido a ser reemplazado por cadenas fijas (sin referencias o &
, a menos que yo mismo los implementara. en básico).
Asi que:
- hace configuración
opts.replaceString
actualmente HACER ¿cualquier cosa? - Si es así:
- ¿Qué hace?
- ¿Dónde / cómo recupero el resultado de lo que hace?
Nota: esta pregunta es sobre programación en Libreoffice Basic para devolver una cadena de cambio, y tiene nada en absoluto hacer con hacer una búsqueda y; Reemplace en las celdas con la interfaz de usuario de Libreoffice Calc.
Mid()
como una declaración para reemplazar en lugar deMid()
como una función para extraer. Funciona, pero es torpe, y parece que no debería ser necesario ya queSearchOptions
la estructura en realidad tiene unaReplaceString
objeto. No incluí el bucle en mi pregunta porque quería evitar recibir sugerencias para mejorarlo cuando lo que quiero es información sobre cómo utilizar elreplaceString
así que puedo deshacerme de él por completo.