Strona 1 z 1
[SOLVED] Jak wyszukać coś w dokumencie? (makro)
: czw kwie 04, 2013 12:01 pm
autor: JackK
Cześć.
Dziś pierwszy raz muszę coś zrobić w OpenOffice. Muszę napisać makro, które sprawdza, czy w tekście odpowiednie znaczniki są poprawnie wpisane (zamykają się w dobrej kolejności).
Nie wiem jednak nawet, jak zacząć. Na początek przydałoby się wiedzieć, jak:
- w zmiennej uzyskać treść dokumentu
- wyszukać ciąg z wykorzystaniem wyr. regularnego
Ogólnie: jestem zielony w temacie.
Przykład dokumentu:
<${{m1}}>tu coś jest
<${{m2}}>i tu także</${{m2}}>
</${{m1}}>
Muszę zrobić makro, które sprawdzi, czy wszystkie znaczniki są zamknięte i nie zachodzą na siebie. Jeśli jest błąd, to kursor na się znaleźć na błędnej pozycji.
Proszę o pomoc,
Jacek
Re: Jak wyszukać coś w dokumencie? (makro)
: czw kwie 04, 2013 1:17 pm
autor: JackK
Na razie mam takie coś:
Kod: Zaznacz cały
'***** BASIC *****
Dim el_1kl As String
Dim oDoc As Object
Sub jk_check_openclose
el_1kl = "<\$\{([^>]+)\}>"
Dim oReplace As Object
Dim SrchAttributes(0) As New com.sun.star.beans.PropertyValue
oDoc = ThisComponent
oReplace = oDoc.createReplaceDescriptor
oReplace.SearchString = el_1kl
oReplace.ReplaceString = "&"
oReplace.SearchRegularExpression = True 'Use regular expressions
oReplace.searchAll = False
oDoc.replaceAll(oReplace)
End Sub
Gdzie mogę znaleźć wynik tego wyszukiwania? Każdy ze znalezionych przez wyrażenie regularce ciąg chciałbym umieścić w tablicy. Jak to zrobić?
----------------
edit
Już mam znalezioną wartość.
Inne pytanie: jak ze zmiennej tekstowej usunąć jakiś fragment wybrany wyrażeniem regularnym?
Re: Jak wyszukać coś w dokumencie? (makro)
: czw kwie 04, 2013 7:25 pm
autor: Jan_J
???
Pisanie analizatora znakowania (albo jego części) w UNO to jakiś masochzim. Są do tego lepsze narzędzia.
A i całe zadanie nie jest dla zielonych. Trzeba coś wiedzieć i o programowaniu, i o wyrażenach regularnych.
Czy naprawdę musisz robić to makrem w OpenOffice?
Re: Jak wyszukać coś w dokumencie? (makro)
: pt kwie 05, 2013 9:38 am
autor: JackK
Dzięki za odpowiedź, Janie.
Sporo już mam. Znajduje mi ciągi i ładuje to tablicy. Jestem w stanie określić, który tag jest źle zamknięty.
Teraz potrzebuję ustawić kursor w miejscu, gdzie jest błąd. Mam:
Kod: Zaznacz cały
Dim oDoc As Object
Dim oText As Object
Dim oSearch As Object
Dim ser As String
Dim iPos As Integer
Sub jk_check_openclose
oDoc = ThisComponent
oText = ThisComponent.getText()
ser = "</?\$\{([^>]+)\}>"
oSearch = oDoc.createSearchDescriptor
oSearch.SearchString = ser
oSearch.SearchRegularExpression = True
oSearch.searchAll = False
arr = Array()
arrsize = -1
fnd = oDoc.findFirst(oSearch)
do while not IsNull(fnd)
f$ = fnd.getString() ' znaleziony string
MsgBox f$ + " arrsize=" + arrsize
iPos = InStr(f$, "/")
if iPos > 0 then
if arr(arrsize) = Mid(f$, 1,iPos-1) + Mid(f$, iPos+1, 99) then
arrsize = arrsize - 1
if arrsize >= 0 then
redim preserve arr(arrsize) ' usuń ostatnią wartość z tablicy
else
redim arr()
endif
else
MsgBox "Błąd! Nie zamknięte " + arr(arrsize)
' COŚ TAKIEGO ZNALAZŁEM W NECIE, ALE NIE WIEM, JAK TO DOSTOSOWAĆ DO MEGO PRZYKŁADU
' POZYCJĘ, NA JAKIEJ POWINIEN USTAWIĆ SIĘ KURSOR MAM W fnt.Start (jeśli dobrze rozumiem)
'oCursor = thisComponent.getText.createTextCursor
'or
'oText = thisComponent.getText
'oCursor = oText.createTextCursorByRange(oText.getStart)
exit do
endif
else
arrsize = arrsize + 1
redim preserve arr(arrsize) ' rozszerz tablicę pozostawiając poprzednią zawartość
arr(arrsize) = f$ ' na ostatniej pozycji dodaj znaleziony string
endif
fnd = oDoc.findNext(fnd.End, oSearch) ' znajdź następny string
loop
End Sub
Jak ustawić ten kursor?
Re: Jak wyszukać coś w dokumencie? (makro)
: pt kwie 05, 2013 2:43 pm
autor: JackK
Zrobiłem zaznaczenie przy pomocy:
Kod: Zaznacz cały
oView = ThisComponent.getCurrentController()
oView.select(fnd)
i to mi wystarczy.