[SOLVED] Jak wyszukać coś w dokumencie? (makro)

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO

[SOLVED] Jak wyszukać coś w dokumencie? (makro)

Postprzez JackK » Cz kwi 04, 2013 12:01 pm

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
Ostatnio edytowano Pt kwi 05, 2013 2:43 pm przez JackK, łącznie edytowano 1 raz
OpenOffice 3 na Windows 7
JackK
 
Posty: 21
Dołączył(a): Cz kwi 04, 2013 11:41 am

Re: Jak wyszukać coś w dokumencie? (makro)

Postprzez JackK » Cz kwi 04, 2013 1:17 pm

Na razie mam takie coś:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
'*****  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?
OpenOffice 3 na Windows 7
JackK
 
Posty: 21
Dołączył(a): Cz kwi 04, 2013 11:41 am

Re: Jak wyszukać coś w dokumencie? (makro)

Postprzez Jan_J » Cz kwi 04, 2013 7:25 pm

???
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?
JJ
LO 4.[34] ∙ AOO 4.1 ∙ Python (2.[67]|3.4) ∙ Unicode 7 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (2.6|3.x) ∙ Fedora 19 ∙ CentOS 6.6 ∙ SUSE 13.1
Jan_J
 
Posty: 2592
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Jak wyszukać coś w dokumencie? (makro)

Postprzez JackK » Pt kwi 05, 2013 9:38 am

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   Rozszerz widokZwiń widok
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?
OpenOffice 3 na Windows 7
JackK
 
Posty: 21
Dołączył(a): Cz kwi 04, 2013 11:41 am

Re: Jak wyszukać coś w dokumencie? (makro)

Postprzez JackK » Pt kwi 05, 2013 2:43 pm

Zrobiłem zaznaczenie przy pomocy:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
oView = ThisComponent.getCurrentController()
oView.select(fnd)
i to mi wystarczy.
OpenOffice 3 na Windows 7
JackK
 
Posty: 21
Dołączył(a): Cz kwi 04, 2013 11:41 am


Powrót do Makra i programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości