Július Pastierik / 20. 04. 2006, 00:00
V dnešnom dieli seriálu o programovaní makier v OpenOffice.org si budeme hovoriť o interaktívnom zadávaní reťazcov pomocou funkcie „InputBox“.
Ako sme už spomínali v časti „Makrá v OpenOffice.org 3/I. – Správy“, pre interaktívne zadávanie údajov máme v OpenOffice.org tri základné možnosti – správy, vstupné funkcie a dialógy. O správach sme si toho popísali v predchádzajúcich štyroch dieloch už dosť a preto sa teraz zameriame na vstupné funkcie.
Vstupné funkcie
Pri programovaní makier v OpenOffice.org máme k dispozícii iba jednu vstupnú funkciu „InputBox“, ktorá vracia zadaný reťazec. Táto funkcia má tri vstupné parametre:
InputBox("Nápovedný text","Nadpis okna","Štandardná hodnota")
Hoci táto funkcia dokáže vrátiť iba reťazec, je to úplne postačujúce, pretože prípadný prevod na iný typ premenných je v jazyku StarOffice Basic vyriešený veľmi jednoducho. Jednotlivé parametre nebudeme teraz teoreticky rozoberať, ale v niekoľkých dieloch si na konkrétnych príkladoch radšej ukážeme praktické použitie tejto funkcie. Myslím si, že z týchto príkladov pochopí ich význam každý bez osobitnej potreby vysvetľovania.
Spočítavame textové reťazce
Ako prvý príklad, v ktorom vynikajúco využijeme možnosti funkcie „InputBox“ je makro pre spočítanie počtu výskytov textových reťazcov. Každý z nás má svoje „obľúbené“ výrazy (napr. u mňa je to slovo „samozrejme“ vrátane jeho synoným), ktoré, chtiac-nechtiac, prenáša aj do písomného prejavu. Pravdaže (a znovu je tu moje „samozrejme“ – teraz v slove „pravdaže“), toto môže prekážať a preto ako dobrá pomôcka môže byť zistenie ich počtu. Pre vlastné spočítanie by sme mohli použiť „fintu“ náhrady toho istého reťazca za ten istý, pričom by sme zistili počet týchto „výmien“. Takéto riešenie je však veľmi nepraktické, pretože v prípade, že máme príslušný výraz napísaný raz veľkými písmenami, inokedy malými a inokedy zas iba s veľkým písmenom na začiatku, príslušná výmena by toto formátovanie zrušila a všetko by sa nahradilo rovnakým textom. Preto je vhodnejšie, ak si na zistenie vlastného počtu urobíme vlastnú funkciu „Spocitaj_hladanim“. Na to nám stačí veľmi jednoducho upraviť napr. funkciu „Vymen_hladanim“, kde vynecháme tie časti, v ktorých nahrádzame nájdený reťazec, a výsledok môže vyzerať napríklad takto:
REM Funkcia spočíta počet výskytov reťazca Co
function Spocitaj_hladanim(Co as string, Regularne, Cele_slova, Velke_pismena as Boolean) as long
dim nasiel as object
dim kolko as long
Hladaj.searchString=Co
Hladaj.SearchRegularExpression=Regularne
Hladaj.SearchWords=Cele_slova
Hladaj.SearchCaseSensitive=Velke_pismena
kolko=0
nasiel = Dokument.findFirst(Hladaj)
Do While NOT isNull(nasiel)
if len(nasiel.String)>0 then
kolko=kolko+1
end if
nasiel = Dokument.findNext( nasiel.End, Hladaj)
Loop
Spocitaj_hladanim=kolko
end function
Vlastná procedúra pre zadanie hľadaného reťazca a následné spočítanie jeho výskytu potom môže vyzerať napríklad takto (predpokladajme, že funkciu „Spocitaj_hladanim“ sme uložili do modulu „Formatovanie_funkcie“):
sub Spocitaj_slova
dim slovo as string
dim kolko as long
slovo= inputbox("Zadajte reťazec, ktorý chcete spočítať:","Počet výskytov reťazca","")
Formatovanie_funkcie.Init
kolko=Formatovanie_funkcie.Spocitaj_hladanim(slovo,False,True,False)
msgbox("Reťazec „"+slovo+"“ sa vyskytuje "+kolko+" krát.",0,"Počet výskytov reťazca")
end sub
Pri takejto práci je však pohodlnejšie, ak si označíme hľadaný reťazec do bloku, a makro nám ho následne automaticky ponúkne ako štandardnú hodnotu, ktorú stačí iba „odklepnúť“. Na tento účel využijeme systémovú objektovú premennú „getCurrentSelection“, pomocou ktorej získame prístup k označenému textu. Pochopiteľne, v makre musíme pamätať aj na to, že žiadny text neoznačíme. Výsledné makro potom môže vyzerať takto.
sub Spocitaj_slova
dim slovo, oznacene as string
dim kolko as long
dim dokument, vyber as object
dokument=thisComponent ' aktuálny dokument
vyber=dokument.getCurrentSelection() ' aktuálny vyber
oznacene="" ' V prípade, že nebude označený žiadny text, bude štandardný text prázdny
' Ak je počet označených častí nenulový
if vyber.getCount()>0 then
' Vyberieme označený reťazec a orežeme ho o okrajové medzery
oznacene=trim(vyber.getByIndex(0).getString())
endif
slovo= inputbox("Zadajte reťazec, ktorý chcete spočítať:","Počet výskytov reťazca",oznacene)
Formatovanie_funkcie.Init
kolko=Formatovanie_funkcie.Spocitaj_hladanim(slovo,False,True,False)
msgbox("Reťazec „"+slovo+"“ sa vyskytuje "+kolko+" krát.",0,"Počet výskytov reťazca")
end sub
Na budúce: Prevádzame číslo na text, alebo konečne makro, ktoré využijeme aj v module „Calc“.
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk