Makrá v OpenOffice.org 2/VII. – Končíme s nezalomiteľnými medzerami

Július Pastierik  /  16. 02. 2006, 00:00

V dnešnom dieli dokončíme množinu funkcií pre vkladanie nezalomiteľných medzier, čím, pochopiteľne, ešte stále nevyčerpáme celú túto problematiku. Rôzne iné možnosti však necháme ako domácu úlohu.

Nezalomiteľné čísla“

Ako posledné funkcie, ktoré si v oblasti nezalomiteľných medzier naprogramujeme budú procedúry pre vkladanie týchto medzier za čísla. Pripomeňme si, že nezalomiteľné medzery by mali byť za jednociferným číslom bez bernej jednotky (napr. „9 ľudí“), medzi rádovými skupinami cifier vo vnútri čísla alebo pri telefónnych číslach (napr. „5 784 452“) a medzi číslom a značkou mernej jednotky (napr. „15 kg“). Úplne najjednoduchšie riešenie je také, že nezalomiteľnú medzeru vložíme za úplne každé číslo, napríklad takto:

sub Nezalomitelne_cisla

 dim kolko as long

 kolko=Vymen_hladanim("[0-9] "," ",NM,true,false,false)
 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné čísla")

end sub


Toto riešenie bude určite mnohým postačovať, no na druhej strane vkladá nezalomiteľné medzery za čísla aj vtedy, keď to nie je potrebné, napr. v texte „12 stromov“. Preto musíme jednotlivé možnosti naprogramovať osobitne.

„Nezalomiteľné jednociferné čísla“

Riešenie problematiky jednociferných čísiel je veľmi jednoduché, pretože za každým jednociferným číslom by mala nasledovať nezalomiteľná medzera. Jednociferné číslo zistíme podobne, ako sme zisťovali predložky – t.j. číslo za ktorým je medzera sa musí nachádzať na začiatku slova:

sub Nezalomitelne_jednociferne_cisla

 dim kolko as long

 kolko=Vymen_hladanim("\<[0-9] "," ",NM,true,false,false)
 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné jednociferné čísla")

end sub


„Nezalomiteľné telefónne čísla“

V prípade rádových skupín cifier a telefónnych čísiel musíme zameniť medzeru, ktorá sa nachádza medzi dvomi číslami:

sub Nezalomitelne_telefonne_cisla

 dim kolko as long

 kolko=Vymen_hladanim("[0-9] [0-9]"," ",NM,true,false,false)
 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné telefónne čísla")

end sub


„Nezalomiteľné merné jednotky“

Na koniec sme si nechali problematiku nezalomiteľných medzier, ktoré sa nachádzajú medzi číslom a značkou mernej jednotky. Aby sme mohli vyriešiť túto problematiku, musíme, podobne ako pri akademických tituloch vymenovať všetky merné jednotky, ktoré sa za číslom môžu vyskytovať. Už v tomto však objavíme problém, pretože celkový počet rôznych merných jednotiek (vrátane ich kombinácií s násobkami „kilo“, „mega“, „piko“ …) dosahuje rádovo stovky možností. Pravdaže, málokto v praxi používa skutočne všetky a preto, ak ich počet bude ešte únosný, môže použiť nasledovné makro, kde sme ako príklad použili jednotky dĺžky:

sub Nezalomitelne_merne_jednotky

 dim Merne_jednotky() as string
 dim i, kolko as long

 Merne_jednotky()=array("m", "km", "mm", "cm")

 for i=lbound(Merne_jednotky()) to ubound(Merne_jednotky())
  kolko=kolko+Vymen_hladanim("[0-9] "+Merne_jednotky(i)," ",NM,true,false,false)
 next i

 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné merné jednotky")

end sub


Počet merných jednotiek,pri ktorých bude uverejnené makro ešte dostatočne rýchle závisí najmä od veľkosti spracovávaných dokumentov a preto sa nedá jednoznačne určiť ich počet. Vzniká otázka, či by sa to predsa len nedalo vyriešiť inak, pretože testovanie rôznych možností jednotiek v rámci jedného cyklu je určite rýchlejšie, ako opakované prehľadávanie celého dokumentu. Našťastie, aj v tomto smere nám riešenie poskytujú priamo regulárne výrazy, kde máme možnosť zadať logickú podmienku „alebo“:

sub Nezalomitelne_merne_jednotky

 dim kolko as long

 kolko=kolko+Vymen_hladanim("[0-9] (m|km|mm|cm)"," ",NM,true,false,false)

 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné merné jednotky")

end sub


Toto riešenie môžeme použiť aj na iné funkcie v oblasti formátovania nezalomiteľných medzier. O tom si však budeme hovoriť až niekedy inokedy.

Na budúce: Odstraňujeme nadbytočné medzery, alebo preklepy na pokračovanie.



Neprehliadnite: