Július Pastierik / 13. 04. 2006, 00:00
V dnešnom pokračovaní seriálu o programovaní makier v OpenOffice.org si ukážeme, ako vyriešime ukladanie nastavení do „inicializačného“ súboru s tým, že automaticky dokážeme vyriešiť prípad aj jeho prípadného poškodenia či úplnej absencie.
Minule sme si uviedli krátky prehľad základných funkcií, ktoré potrebujeme pri práci so súbormi. Ešte pred tým, ako si naprogramujeme vlastné procedúry pre prácu s nimi si musíme uviesť niekoľko požiadavok a podmienok, ktoré budeme na ne klásť.
Pri práci so súbormi musíme mať na pamäti, či súbor, s ktorým chceme pracovať vôbec existuje a ak neexistuje, tak kto a ako ho vytvorí. Pretože inicializačné súbory v našom prípade budeme vytvárať interne (t.j. iba pomocou nami naprogramovaných podprogramov), musíme predpokladať, že tieto súbory ešte vôbec neexistujú.
Pre praktickú stránku veci je navyše vhodné, aby sme testovali nielen ich existenciu, ale údaje (počet a typ), ktoré sú v nich uložené. Vďaka tomuto riešeniu totiž môžeme tieto súbory v ďalších verziách makier modifikovať (t.j. meniť počet údajov, ktoré si v nich pamätáme) bez toho, aby sme ich museli pred tým manuálne vymazať. Pravdaže, týmto riešením sa vyhneme aj prípadných iným chybám, ku ktorým by mohlo dôjsť v prípade čo aj nechceného poškodenia týchto súborov.
Pre zistenie, či súbor existuje použijeme štandardnú funkciu „FileExists(meno_súboru)“, ktorá vracia logickú hodnotu True, ak súbor so zadaným menom existuje alebo logickú hodnotu False, ak neexistuje. Pokiaľ zohľadníme predchádzajúce pripomienky, základná verzia príslušných programov pre prácu so súbormi môže vyzerať napríklad takto:
REM Pretože meno súboru budeme potrebovať na viacerých miestach, nastavíme si ho iba raz napr. vo forme funkcie
function Subor_nezalomitelne_predlozky as string
REM Funkcia vracia názov inicializačného súboru
Subor_nezalomitelne_predlozky="file:///c:/Program files/OpenOffice.org 2.0/Nezalomitelne_Predlozky.dat"
end function
REM Procedúra pre vytvorenie/uloženie nastavenia
sub Uloz_nastavenie_predlozky(male_a as boolean)
REM Procedúra vytvorí inicializačný súbor, kde uloží príslušné nastavenia
dim subor as integer
subor = Freefile
open Subor_nezalomitelne_predlozky for Output as #subor
' REM Funkcia PRINT zapíše do súboru slovo „True“ alebo „False“
print #subor, male_a
close #subor
end sub
function Citaj_nastavenie_predlozky as boolean
dim i, subor as integer
dim riadok as string
dim male_a as boolean
REM Tu si nastavíme štandardnú hodnotu pre prípad poškodenia alebo absencie inicializačného súboru
male_a=True
' Ak nastavovací súbor neexistuje, vytvoríme ho a uložíme do neho štandardné hodnoty
if not fileexists(Subor_nezalomitelne_predlozky) then
Uloz_nastavenie_predlozky(male_a)
endif
' Teraz súbor určite existuje - načítame ho
subor = Freefile
open Subor_nezalomitelne_predlozky for Input as #subor
i=0 ' Počítadlo načítaných riadkov
' Ak nie sme na konci súboru, tak môžeme načítať uloženú informáciu
if not eof(subor) then
i=i+1
Line Input #subor, riadok
endif
close #subor
if i<1 then
' V súbore nebol správny počet údajov – prepíšeme ho na štandardné hodnoty
Uloz_nastavenie_predlozky(male_a)
else
' Počet údajov je správny, ešte otestujeme ich správnosť
select case riadok
case "True"
male_a=True
case "False"
male_a=False
case else
' Údaj je poškodený – nie je to logická hodnota a preto súbor opravíme
Uloz_nastavenie_predlozky(male_a)
end select
endif
Citaj_nastavenie_predlozky=male_a
end function
Vlastné makro pre vkladanie nezalomiteľných medzier za predložky môže teraz vyzerať takto:
function f_Nezalomitelne_Spojky as long
dim spojky as string
if Citaj_nastavenie_predlozky then
spojky="\<(A|a|I|i|K|k|O|o|S|s|U|u|V|v|Z|z) "
else
spojky="\<(A|I|i|K|k|O|o|S|s|U|u|V|v|Z|z) "
endif
f_Nezalomitelne_Spojky=Vymen_hladanim(spojky," ", NM, true, false, true)
end function
A nakoniec si ešte musíme napísať procedúru pre vlastné zadanie potrebného nastavenia:
sub Nastav_parameter_pre_medzery
dim tlacidlo as integer
tlacidlo=msgbox("Vložiť nezalomiteľnú medzeru za spojku 'a'?", 36,"Nezalomiteľné medzery")
if tlacidlo=6 then ' Yes
Uloz_nastavenie_predlozky(True)
else ' No
Uloz_nastavenie_predlozky(False)
endif
end sub
Na budúce: Zadávame vstupné reťazce, alebo ďalšie možnosti interaktívnych vstupov.
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