Programovanie makier v LibreOffice: Tvorba a mazanie adresárov

LO.png Naučte sa vytvárať a mazať adresáre s pomocou jednoduchých funkcii. Tiež si povieme niečo o získavaní separátorov v absolútnych cestách, ktoré sa líšia podľa operačných systémov.   

Získanie separátoru v absolútnej ceste

Systémová cesta resp. presnejšie absolútna cesta k súboru v Linuxe a Windowse sa líši rozdielnosťou separátorov, ktoré oddeľujú adresáre. Zatiaľ čo vo Windowse je separátor vyjadrený znakom \, v Linuxe je to /. Ak by ste mali program, ktorý chcete využiť na Linuxe aj vo Windowse, tak musíte vždy prehadzovať separátory. Avšak nezúfajte, tomuto nevďačnému úkonu sa môžeme vyhnúť použitím funkcie getPathSeparator(). V nasledujúcej ukážke implementuje funkciu getPathSeparator() vo Windowse.

Sub getPathWindows

Dim path As String

path = "C:" & getPathSeparator() & "Používatelia" & getPathSeparator() & "astronom" & getPathSeparator() & "Pracovná plocha" & getPathSeparator() & "file.cpp"

MsgBox path

End Sub

01pics.png

Ak chceme ten istý program nasadiť na Linux, tak systémovú resp. absolútnu cestu k súboru mierne upravíme, okrem separátoru. Vďaka funkcii getPathSeparator() nemusíme prepisovať separátor a ak máte obzvlášť dlhé absolútne cesty alebo ich máte v programe nadefinovaných veľmi veľa, tak vám to ušetrí drahocenný programátorsky čas. Teraz nasleduje ukážka programu v Linuxe.

Sub getPathLinux

Dim path As String

path = getPathSeparator() & "home" & getPathSeparator() & "astronomer" & getPathSeparator() & "Plocha" & getPathSeparator() & "file.cpp"

MsgBox path

End Sub

02pics.png

Skúsme teraz program rozšíriť o konvertovanie absolútnej cesty do URL cesty a späť.

Sub getPathWindowsURL

Dim path, url_adresa As String

path = "C:" & getPathSeparator() & "Používatelia" & getPathSeparator() & "astronom" & getPathSeparator() & "Pracovná plocha" & getPathSeparator() & "file.cpp"

url_path = ConvertToURL(path)

path2 = ConvertFromURL(url_path)

MsgBox "Absolútna cesta: " & path & Chr(10) & "URL cesta: " & url_path & Chr(10) & "Absolútna cesta po prevode z URL cesty: " & path2

End Sub

03pics.png

Zistiť aktuálny adresár

Potrebujete zistiť aktuálny adresár, v ktorom pracuje vaše makro? Na tento účel poznáme funkciu CurDir(), ktorá zistí aktuálny adresár.

Sub currentDir

Dim currentPath As String

path = CurDir()

MsgBox "Aktuálny adresár: " & path

End Sub

04pics.png

Tvorba nových adresárov

Ak chceme vytvoriť nový adresár, využijeme funkciu MkDir(). Táto funkcia má argument path, v ktorom definujete absolútnu cestu. Základnú implementáciu funkcie MkDir() si ukážeme v nasledujúcom programe.

Sub createDir

Dim path As String

path = "C:\Users\astro\Desktop\makra"

MkDir(path)

End Sub

Po spustení programu sa nám vytvoril adresár nazvaný ako makra. Je umiestnený na pracovnej ploche vo Windows. Pri definovaní absolútnej cesty nezabudnite pridať na konci cesty názov adresáru, ktorý chcete vytvoriť. Preto končí moja nadefinovaná absolútna cesta názvom budúceho priečinku makra. Obdobne to funguje v Linuxe, len pozor na separátory.

Za argument funkcie môžeme použiť okrem absolútnej cesty aj URL adresu. Skúsme dať v ďalšom makre argument ako URL adresu, ktorú získame prevodom absolútnej cesty na URL adresu.

Sub createDir

Dim path As String

path = "C:\Users\astro\Desktop\makra"

url_path = ConvertToURL(path)

MkDir(url_path)

End Sub

Mazanie adresárov

Ak vieme vytvoriť adresár, tak zákonite by sme mali byť schopný ho aj vymazať. Na zmazanie adresára slúži funkcia RmDir(). Rovnako ako MkDir(), má jeden argument, ktorým definujeme absolútnu cestu k adresáru. Nasledujúca ukážka zhrňuje všetko, čo sme si doteraz ukázal aj s implementáciou funkcie RmDir().

Sub deleteDir

Dim path As String

path = "C:\Users\astro\Desktop\makra"

url_path = ConvertToURL(path)

MkDir(url_path)

RmDir(url_path)

End Sub


Námet na tento článok poslúžili tieto zdroje:

OpenOffice.org Macros Explained Third Edition, Andrew Pitonyak, page 168-169, dostupné online

Funkce CurDir, help.libreoffice.org, dostupné online

Funkce MkDir, help.libreoffice.org, dostupné online

Funkce RmDir, help.libreoffice.org, dostupné online





(Jako ve škole) Průměr: 1.00 | Hodnotilo: 3
 

Komentáře

user avatar neutr
Odpovědět
Programovanie makier v LibreOffice: Tvorba a mazanie adresárov
24. 07. 2019, 16:09:43
Jenom malá připomínka. V nápovědě je uvedeno pro :
CurDir a ChDir "Tento příkaz momentálně nefunguje podle dokumentace. Více informací najdete v popisu této chyby."


V minulosti byly podobné poznámky i u jiných příkazů s "NěcoDir". Nicméně ChDir (Change Directory) se asi tak často nepoužívá na rozdíl od CurDir (Curent Directory). Nevím jestli poznámky v nápovědě nejsou jen anachronizmem, ale osobně se tohoto příkazu obávám. Bojím se, že i když dnes chodí - tak se znovu může dostat do nestandardního chování.

Je možné, že jde o Operační Systém, ale já to obcházím cyklem už proto, že to co platí v LO nemusí platit v AOO. Provádím celkem často operace s adresáři a základem je cyklus který od konce iteruje výraz získaný z proměnné :

Dim sVar, sVal, Sep, MyUrl, MyName As String
sVar = ConvertFromUrl(ThisComponent.Url), nebo podle potřeby
sVar = ConvertFromUrl(oDoc.Url)
For i = Len(sVar) To 1 Step - 1
IF Mid(sVar,i,1) = "/" OR Mid(sVar,i,1) = "\" Then
sep = Mid(sVar,i,1)
sVal = Left(sVar,i)
Exit For
End If
Next i


Následně použiji například konstrukci vnořeného adresáře "MyFolder" :
MyUrl = ConvertToUrl(sVal & MyFolder & sep & MyName & ".ods(.odt)")


Vytvořený dokument ukládám na MyUrl. Obešel jsem tak nejen CurDir, ale také MkDir. Vím že to funguje na každém systému. Při podobných operacích (vytvoření nového dokumentu který se ukládá do složky, nebo i bez složky vedle zdrojového dokumentu) se bez podobného cyklu neobejdeme. Potom nás případná chyba "příkazu" nezajímá.


Podobně obcházím i případy kdy testuji obsah složky - na to se hodí výborně CurDir - a le z principu nechci riskovat chybu pokud by příkaz začal zase zlobit. Místo RmDir (Remove Directory) používám Kill ale jen proto, že mažeme většinou jen určitý soubor. RmDir smaže adresář ale v minulosti i tam byly problémy - nesměl být například otevřený některý soubor z mazaného adresáře. To snad platí stále ale také z principu mažu jen jmenované soubory. Chyba nechtěného smazání je při použití RmDir veliká a celkem fatální.

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz