Július Pastierik / 09. 10. 2008, 00:00
V dnešnom pokračovaní seriálu o makrách v OpenOffice.org si ukážeme makro pre import a export používateľských slovníkov z a do textových súborov.
Pokiaľ používate operačný systém MS Windows, viete, že jeho súčasťou je aj slovník „custom.dic“, ktorý sa ukladá v obyčajnom textovom formáte. Žiaľ, tento slovník nie je v tomto tvare použiteľný pre OpenOffice.org a preto nezostáva nič iné, ako slová, ktoré obsahuje, nanovo vložiť do niektorého z používateľských slovníkov.
Toto však nemusíme robiť manuálne, ale môžeme si na to naprogramovať makro. Pravdaže, makro nebudeme robiť tak, aby pracovalo iba s týmto slovníkom, ale naprogramujeme ho tak, aby sme mohli importovať ľubovoľný slovník v textovom formáte, kde sú slová zadané v riadkoch.
Zároveň, keď už importujeme slovníky, prečo ich aj neexportovať, teda spätne neuložiť do textového súboru, ktorý môžeme ľahko preniesť na iný počítač alebo zálohovať na CD médium.
Aby sme mohli vyberať slovník, s ktorým chceme robiť import alebo export a zároveň, aby sme mohli vybrať príslušný textový súbor, vytvoríme si v makre dialóg so vstupným poľom pre názov textového súboru (vrátane tlačidla pre jeho výber), zoznamom používateľských slovníkov a, samozrejme, tlačidlami pre spustenie importu alebo exportu. Pravdaže, k príslušným tlačidlám je potrebné na záložke „Udalosti“ priradiť príslušné makrá. Aby sme vedeli, že import a export prebehol úspešne, vložíme si tam aj prázdne textové pole, do ktorého budeme vypisovať priebeh spracovania. Celé makro aj s dialógom uložíme do knižnice „dictionary_IO“.
Na záver ešte upozornime, že jeden používateľský slovník v OpenOffice.org môže obsahovať maximálne 2000 slov. Pri vlastnom importe sa do neho nevloží slovo, ktoré sa v ňom už nachádza (toto zabezpečuje priamo OpenOffice.org) a OpenOffice.org nevyhlási chybu, ak sa pokúsime naimportovať viac slov – zdá sa, akoby ich importoval, ale v skutočnosti ich do súboru nevloží. Toto však v makre riešiť nebudeme a ponecháme iba na používateľovi, aby si prípadný väčší vstupný súbor rozdelil na menšie podľa svojho vlastného uváženia, prípadne to necháme ako „domácu úlohu“.
REM Import/Export používateľských slovníkov
private dialog_IO as object
Sub Import_Export_slovnikov
dim pom_zoznam, zoznam, slovniky as object
DialogLibraries.LoadLibrary("dictionary_IO") ' Otvorenie knižnice
dialog_IO=CreateUnoDialog (DialogLibraries.dictionary_IO.Dialog_dictionary_IO) ' Sprístupnenie dialógu
' Načítanie zoznamu slovníkov
pom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
zoznam=pom_zoznam.GetDictionaries ' zoznam slovníkov
slovniky=dialog_IO.getControl ("zoznam_slovnikov") ' prístup k zoznamu slovníkov v dialógu
' Vloženie názvov slovníkov do zoznamu v dialógu
for i=LBound(zoznam) to UBound(zoznam)
slovniky.AddItem(zoznam(i).Name, slovniky.ItemCount)
next i
slovniky.Text=slovniky.Items(0) ' Zobrazenie prvej položky
' Vlastný Import/Export
dialog_IO.Execute()
' Vymazanie dialógu
dialog_IO.dispose()
End Sub
sub Vyber_textovy_subor
' Túto funkciu priradíme k tlačidlu pre výber súboru
dim pom_dialog as object
' Štandardný systémový dialóg pre otvorenie súboru
pom_dialog=CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
pom_dialog.SetMultiselectionMode (False)
pom_dialog.Title="Výber textového súboru"
if pom_dialog.Execute() = 1 then
'Ak sme vybrali súbor, tak nastavímne jeho názov a cestu do IO dialógu
dialog_IO.getControl("textovy_subor").Text=ConvertFromURL(pom_dialog.Files(0))
endif
end sub
Sub Import_slovnika
' Túto funkciu priradíme k tlačidlu Import
dim pom_zoznam, slovnik as object
dim pom_nazov, nazov, naz_slovnik, slovo as string
pom_zoznam=createUnoService ("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
isubor=FreeFile
pom_nazov=dialog_IO.getControl("textovy_subor").Text
nazov=ConvertToURL(pom_nazov)
' Ak súbor neexistuje, nie je z čoho importovať
if not FileExists (nazov) then
msgbox "Súbor '"+pom_nazov+"' neexistuje."
exit sub
endif
open nazov for Input as isubor
naz_slovnik=dialog_IO.getControl("zoznam_slovnikov").Text ' Názov vybraného slovníka
slovnik=pom_zoznam.GetDictionaryByName(naz_slovnik) ' Sprístupnenie zadaného slovníka
ipovodne=slovnik.Count ' Pôvodný počet slov v slovníku
i=0
while not EOF (isubor)
Line Input #isubor, slovo ' Načítanie slova z tetxového súboru
slovnik.Add(slovo, False, "") ' Vloženie slova do slovníka
i=i+1
dialog_IO.getControl("popis_vysledku").Text = "Importovaných "+i+" slov." ' Priebežné zobrazovanie importu
wend
i=slovnik.Count-ipovodne ' Skutočne importovaný počet slov do slovníka (nový počet mínus pôvodný počet)
dialog_IO.getControl("popis_vysledku").Text = "Import "+i+" slov ukončený." ' Oznam o ukončení importu
close #isubor
End Sub
Sub Export_slovnika
' Túto funkciu priradíme k tlačidlu Export
dim pom_zoznam, slovnik as object
dim pom_nazov, nazov, naz_slovnik, slovo as string
pom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
isubor=FreeFile
pom_nazov=dialog_IO.getControl("textovy_subor").Text
nazov=ConvertToURL(pom_nazov)
' Ak súbor existuje, má sa prepísať?
if FileExists (nazov) then
if msgbox("Súbor '"+pom_nazov+"' existuje. Prepísať?",4,"")<>6 then
' Nestlačilo sa tlačidlo "Áno", neexportujeme
exit sub
endif
endif
if nazov="" then
msgbox "Nie je zadaný súbor pre export."
exit sub
endif
isubor=FreeFile
open nazov for output as isubor
naz_slovnik=dialog_IO.getControl("zoznam_slovnikov").Text ' Názov vybraného slovníka
slovnik=pom_zoznam.GetDictionaryByName(naz_slovnik) ' Sprístupnenie zadaného slovníka
' Budeme exportovať všetky slová
for i = LBound(slovnik.Entries) to UBound(slovnik.Entries)
' Zápis slova do exportného súboru
print #isubor, slovnik.Entries(i).DictionaryWord
dialog_IO.getControl("popis_vysledku").Text = "Exportovaných "+i+"/"+slovnik.Count+" slov." ' Priebežné zobrazovanie exportu
next i
dialog_IO.getControl("popis_vysledku").Text = "Export "+slovnik.Count+" slov ukončený." ' Oznam o ukončení exportu
' Zatvorenie exportovaného zoznamu
close #isubor
End Sub
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