Určite sa aj vám stalo, že pri písaní zadáte omylom viac medzier (a vzhľadom na to, že osobne píšem veľmi veľa, môžem iba potvrdiť, že je to naozaj častý preklep). Tento problém sa síce dá riešiť aj pomocou funkcie „Nájsť a nahradiť“, ale ak píšete veľa, je to pomerne nepraktické. Preto si naprogramujeme makro, ktoré to bude robiť automaticky za nás. Zároveň si na tomto makre postupne ukážeme rôzne funkcie programovacieho jazyka StarOffice Basic.
Programujeme v StarOffice Basic
Nové makrá môžeme do OpenOffice.org vkladať priamo tak, že si už známym postupom, o ktorom sme písali minule (menu „Nástroje-Makrá-Usporiadať makrá…-OpenOffice.org Basic…“) otvoríme dialógové okno pre správu makier. Tu prejdeme na modul, kde chceme vložiť naše makro a stlačíme tlačidlo „Upraviť“.
Štandardne v každom module vytvára na začiatku OpenOffice.org prázdne makro s názvom „Main“:
REM ***** BASIC *****
Sub Main
End Sub
S kľudným svedomím môžeme toto makro vymazať, pretože ho nebudeme používať. Teraz napíšeme nasledovné makro s tým, že poznámky a prázdne riadky, samozrejme, nemusíme písať, sú uvedené iba pre lepšiu zrozumiteľnosť a prehľadnosť:
sub Dvojita_Medzera
rem makro zameni dvojitu medzeru za jednoduchu
dim Dokument, Vymena as object ' Objekty pre spristupnenie aktualneho dokumentu a pre vymeny
dim Kolko as Long ' Pocet vymien
Dokument=ThisComponent ' Priradenie aktualneho dokumentu
Vymena=Dokument.createReplaceDescriptor() ' Vytvorime objekt pre zamenu
Vymena.SearchString=" " ' Budeme vyhladavat dve medzery
Vymena.ReplaceString=" " ' a zamienat ich za jednu
Kolko=Dokument.replaceAll(Vymena) ' Prevedieme vymenu. Metoda ReplaceAll vracia pocet vymien
rem vypiseme si pocet zamien
msgbox("Nahradených "+Kolko+" dvojnasobnych medzier.",0,"Viacnásobné medzery")
end sub
Prejdeme do pôvodného dokumentu (nemusíme ukončovať modul „Basic“, stačí, ak prepneme iba okno), kde máme na odskúšanie napísaný text s viacnásobnými medzerami a spustíme vytvorené makro „Dvojita_Medzera“. Ak sme všetko naprogramovali správne, na konci sa dozvieme počet prevedených zámen dvojitých medzier.
V prípade bezchybného chodu zatvoríme následne modul „Basic“, inak musíme hľadať a opravovať chyby.
Teraz sa pozrime na naše makro podrobne a rozoberme si príkaz za príkazom (teda okrem poznámok).
sub Dvojita_Medzera
Naše makro sme nazvali „Dvojita_Medzera“. Názvy sa budeme snažiť dávať také, aby sme podľa nich ľahko rozpoznali, o čo sa vlastne jedná.
dim Dokument, Vymena as object
Definovali sme dve premenné typu object. Niektorí autori používajú také názvy premenných, kde prvé písmeno vyjadruje aj jej typ (napr. v našom prípade oDokument, oVymena). Je to dobrá pomôcka, ktorú však osobne nepoužívam.
Premenná „Dokument“ je určená pre prístup k aktuálnemu dokumentu. Druhá premenná „Vymena“ je určená pre prevedenie vlastnej zámeny dvojitých medzier za jednoduché.
dim Kolko as Long
Do číselnej premennej „Kolko“ si uložíme počet výmien.
Dokument=ThisComponent
Priradenie aktuálneho dokumentu do premennej „Dokument“. Týmto sme získali k tomuto dokumentu prístup.
Vymena=Dokument.createReplaceDescriptor()
Pre výmenu v aktuálnom dokumente (premenná „Dokument“) musíme vytvoriť objekt pre nahrádzanie, ktorý priradíme do premennej „Vymena“.
Vymena.SearchString=" "
V objekte „Vymena“ nastavíme do jeho vyhľadávacej časti reťazec, ktorý chceme nahradiť. V našom prípade sú to dve medzery. Reťazce uzatvárame medzi dve úvodzovky. Pozor na častú chybu začiatočníkov, pokiaľ si pripravujú zdrojový text v externom editore – ako si môžete všimnúť, programové úvodzovky nie sú totožné s bežnými slovenskými a českými textovými úvodzovkami a preto je potrebné ich skontrolovať.
Na priloženej zosnímanej obrazovke si môžete všimnúť tento rozdiel. To isté platí aj pre apostrof, ktorý označuje poznámku.
Vymena.ReplaceString=" "
V objekte „Vymena“ nastavíme do jeho nahrádzajúcej časti reťazec, za ktorý chceme vymeniť hľadaný text. V našom prípade je to jedna medzera uzatvorená, ako inak, do úvodzoviek.
Kolko=Dokument.replaceAll(Vymena)
Pretože sme si v objekte „Vymena“ pripravili všetko, čo potrebujeme pre našu zámenu, môžeme túto previesť zavolaním metódy „ReplaceAll“, ktorá je prístupná v každom aktuálnom dokumente (my ho máme sprístupnený pomocou premennej „Dokument“). Táto metóda zároveň vracia počet zámen, ktorý si uložíme do premennej „Kolko“.
msgbox("Nahradených "+kolko+" dvojnasobnych medzier.", 0, "Viacnásobné medzery")
Určite sme zvedaví, koľko takýchto preklepov robíme a preto si zobrazíme ich počet. Na tento účel použijeme systémovú procedúru „msgbox“. V zátvorke sa nachádzajú tzv. parametre, ktoré sú oddelené čiarkou. Prvý z nich je reťazec: "Nahradených "+kolko+" dvojnasobnych medzier.". Je to vlastný vypisovaný text. Druhý parameter je číslo nula: 0. Ním určujeme aké tlačidlá sa majú zobraziť. Nebudme sa teraz zaoberať ostatnými hodnotami, pretože tie majú význam pri vstupe a preto iba pripomeňme, že hodnota 0 znamená zobrazenie tlačidla „OK“. Posledný parameter je znovu reťazec: "Viacnásobné medzery". Použije sa ako názov tohto okna.
end sub
Týmto príkazom sme ukončili makro „Dvojita_Medzera“.
Ako vidíte, postavili sme týmto makrom základ pre naozaj veľa makier, kde je potrebná zámena jedného reťazca za iný. Priamo v tomto tvare sa dá použiť napr. pre makro, pomocou ktorého budeme zamieňať tri bodky „...“ za „trojbodku“ „…“, t.j. príslušné riadky (parametre procedúry „msgbox“ si zmeňte sami) budú vyzerať takto:
Vymena.SearchString="..."
Vymena.ReplaceString="…"
Hoci sa nám makro pre výmenu dvojitých medzier zdá dobré, nehodí sa nám pre také opravy, keď ako preklep nebudeme mať iba dve medzery, ale viac (vtedy ho totiž musíme spúšťať opakovane dovtedy, kým sa vyskytujú dvojité medzery). Tieto (a ešte aj iné nedostatky) však budeme odstraňovať až v niektorých z budúcich dielov tohto seriálu, keď sa zoznámime s príkazmi jazyka StarOffice Basic.
Na budúce: Aké príkazy má vlastne StarOffice Basic, alebo trinásta komnata sa začína otvárať …