Macro per l'identificazione di un testo compreso tra due stringhe di delimitazione
TDF LibreOffice Document Liberation Project Blog comunitari Weblate Nextcloud Redmine Ask LibreOffice Donazione
Descrizione
Questa macro in Basic per Writer identifica un testo compreso tra due stringhe usate come delimitatori (es. una stringa "delimitatore iniziale" ed una "delimitatore finale"). Ad esempio il testo che si trova tra l'inizio e la fine di una spiegazione.
Il principio è quello di cercare un "delimitatore iniziale" univoco, che costituisce il punto iniziale per la ricerca del "delimitatore finale". Queste due posizioni vengono selezionate tramite il cursore visibile a partire dalla fine del "delimitatore iniziale" e fino all'inizio del "delimitatore finale".
La ricerca viene eseguita usando il metodo createSearchDescriptor dell'interfaccia com.sun.star.util.XSearchable[1] in abbinamento al servizio com.sun.star.util.SearchDescriptor[2] al fine di definire le proprietà della ricerca, tra cui: il testo da ricercare, la sensibilità alle maiuscole e minuscole, l'uso delle espressioni regolari, ecc.
Il sevizio com.sun.star.text.XTextViewCursor[3] è usato per visualizzare il testo trovato.
Codice
Nel codice che segue i delimitatori di inizio e fine sono rispettivamente "inizio della spiegazione" e "fine della spiegazioni".
Option Explicit
Sub SearchText()
'''Cerca ed evidenzia il testo trovato che è compreso tra due delimitatori'''
Dim oDoc As Object ' com.sun.star.text.GenericTextDocument, com.sun.star.util.XSearchable
Dim oSearchZone As Object ' com.sun.star.util.SearchDescriptor
Dim oFoundZone As Object ' com.sun.star.uno.XInterface
Dim oFoundAfterZone As Object ' com.sun.star.uno.XInterface
Dim oCursVisible As Object ' com.sun.star.text.XTextViewCursor
oDoc = ThisComponent ' com.sun.star.util.XSearchable compliant document
oSearchZone = oDoc.createSearchDescriptor()
With oSearchZone ' com.sun.star.util.SearchDescriptor
.SearchString = "inizio della spiegazione"
End With
oFoundZone = oDoc.findFirst(oSearchZone)
If Not(IsNull(oFoundZone)) Then
With oSearchZone ' com.sun.star.util.SearchDescriptor
.SearchString = "fine della spiegazione"
End With
oFoundAfterZone = oDoc.findNext(oFoundZone.End, oSearchZone)
If Not(IsNull(oFoundAfterZone)) Then
oCursVisible = oDoc.currentcontroller.viewCursor
With oCursVisible ' com.sun.star.text.text.XTextViewCursor
.gotoRange(oFoundZone.End, false)
.gotoRange(oFoundAfterZone.Start, True)
MsgBox .String, MB_ICONINFORMATION, "Testo trovato!"
End With
Else
MsgBox "il delimitatore finale NON è stato trovato", MB_ICONINFORMATION, "Ricerca del testo"
End If
Else
MsgBox "il delimitatore iniziale NON è stato trovato", MB_ICONINFORMATION, "Ricerca del testo"
End If
End Sub ' SearchText
Con Pythonː
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
MB_ICONINFORMATION = 64
def SearchText():
"""Cerca ed evidenzia il testo trovato che è compreso tra due delimitatori
oSearchZone com.sun.star.util.SearchDescriptor
oFound(After)Zone com.sun.star.uno.XInterface
oCursVisible com.sun.star.text.XTextViewCursor
"""
oDoc = XSCRIPTCONTEXT.getDocument() # documento conforme a com.sun.star.util.XSearchable
oSearchZone = oDoc.createSearchDescriptor()
oSearchZone.SearchString = "inizio della spiegazione"
oFoundZone = oDoc.findFirst(oSearchZone)
if oFoundZone:
oSearchZone.SearchString = 'fine della spiegazione'
oFoundAfterZone = oDoc.findNext(oFoundZone.End, oSearchZone)
if oFoundAfterZone:
oCursVisible = oDoc.CurrentController.ViewCursor
oCursVisible.gotoRange(oFoundZone.End, False)
oCursVisible.gotoRange(oFoundAfterZone.Start, True)
MsgBox(oCursVisible.String,MB_ICONINFORMATION, "Testo trovato!")
else:
MsgBox('il delimitatore finale NON è stato trovato',MB_ICONINFORMATION, "Ricerca del testo")
else:
MsgBox("il delimitatore iniziale NON è stato trovato",MB_ICONINFORMATION, 'Ricerca del testo')
def MsgBox(prompt="", buttons=MB_ICONINFORMATION, title=""): # Ricerca del testo
pass
Quando eseguite delle macro in Python lo standard output non è disponibile. La pagina dell'Aiuto in linea Input/Output su schermo illustra delle alternative.