Programovanie makier v LibreOffice: Otváranie súborov (1) – príkazy Open a Close

LO.png Chcete si s pomocou makra otvoriť nejaký textový súbor a začať doňho zapisovať? Stačí vám na to príkaz Open, ktorý má v sebe obsiahnuté bohaté možností pri práci so súbormi. Okrem toho si ukážeme nielen otvorenie súborov, ale aj ich zatvorenie s pomocou ďalšieho príkazu, Close.  

Identifikátor súboru

StarBasic nám umožňuje otvárať a rôzne manipulovať so súbormi. Aby sme sa k otváraniu súborov dostali, potrebujeme sa zoznámiť s identifikátorom súboru resp. presnejšie identifikátorom dátového kanálu.

Každý otvorený súbor má nejaké celé číslo, ktoré ho charakterizuje a podľa tohto identifikátora k nemu môžeme pristupovať a vykonávať nad súborom rôzne operácie, napr. čítanie či zápis.

Na získanie identifikátora súboru sa používa funkcia FreeFile(). Vracia nevyužité celé číslo. Toto číslo sa použije pri otváraní súboru a ďalších úkonoch pri práci so súbormi.

Vypíšme hodnotu, ktorú vracia funkcia FreeFile().

Sub idFile
Dim id As Integer
id = FreeFile()
MsgBox "Navratova hodnota funkcie FreeFile(): " & id
End Sub

01pics.pngVypísanie návratovej hodnoty funkcie FreeFile()

Otváranie súborov

Takže poznáme identifikátor súborov, s pomocou neho môžeme so súbormi pracovať. Ostáva si len predstaviť príkaz Open, ktorý otvára samotné súbory. Jeho syntax je nasledovná:

Open FileName For Mode [Access ioMode] [Lock Mode] As #n [Len=Datalen]

Samotná syntax vyzerá na prvé pozretie hrozivo, ale v tomto článku si ukážeme len nutný základ k otvoreniu súboru. To znamená, že nevyužijeme celú syntax príkazu Open, len jej časť. A najlepšie sa učí nad praktickým príkladom. Poďme nato.

Sub openFile
Dim id As Integer
Dim path As String
path = "C:\Users\astro\Desktop\makra\zapisnik.txt"
id = FreeFile()
Open path For Output As #id
MsgBox "Identifikator suboru: " & id 
End Sub

02pics.pngVypísanie identifikátora súboru

Po spustení makra sa nám vytvorí súbor s názvom zapisnik.txt. Je to preto, lebo sme zvolili režim pre zápis, Output. Tento režim umožňuje, že ak neexistuje súbor, ktorý chceme otvoriť, tak vytvorí nový. Nie všetky režimy to ale podporujú. Ak by však vaše súbory existovali a vy spustíte súbor v režime Output, tak by sa mal vymazať súbor a znova vytvoriť. Režimy si viac rozoberieme v ďalších článkoch. Na záver makra sme vypísali identifikátor súboru.

Skúsme teraz otvoriť dva súbory a vypíšme ich identifikátor.

Sub openFile
Dim id1,id2 As Integer
Dim path1,path2 As String

path1 = "C:\Users\astro\Desktop\makra\zapisnik.txt"
path2 = "C:\Users\astro\Desktop\makra\dennik.txt"

id1 = FreeFile()
Open path1 For Output As #id1

id2 = FreeFile()
Open path2 For Output As #id2
MsgBox "Identifikator prveho suboru: " & id1 & Chr(10) & "Identifikator druheho suboru: " & id2 
End Sub

03pics.pngZobrazenie identifikátorov dvoch súborov

Otvorili sme úspešne dva súbory. Taktiež si pri výpise všimnime, že každý súbor má svoj vlastný číselný identifikátor.

Zatvorenie súboru

Ak vieme nejaký súbor otvoriť, logický by sme ho mali vedieť aj uzavrieť. O to sa postará príkaz Close. Vieme ním zavrieť nielen jeden súbor, ale viacero. Nasledujúce makro otvorí tri súbory a potom ich všetky uzavrieme naraz príkazom Close. Následne otvoríme ešte jeden súbor a budeme sledovať, aký identifikátor dostane.

Sub openFile
Dim id1,id2,id3,id4 As Integer
Dim path1,path2,path3,path4 As String

path1 = "C:\Users\astro\Desktop\makra\zapisnik.txt"
path2 = "C:\Users\astro\Desktop\makra\dennik.txt"
path3 = "C:\Users\astro\Desktop\makra\zosit.txt"
path4 = "C:\Users\astro\Desktop\makra\poznamky.txt"

id1 = FreeFile()
Open path1 For Output As #id1

id2 = FreeFile()
Open path2 For Output As #id2

id3 = FreeFile()
Open path3 For Output As #id3

Close #id1 #id2 #id3

id4 = FreeFile()
Open path4 For Output As #id4

MsgBox "Identifikator prveho suboru: " & id1 & Chr(10) & "Identifikator druheho suboru: " & id2 & Chr(10) & "Identifikator tretieho suboru: " & id3 & Chr(10) & "Identifikator stvrteho suboru: " & id4 
End Sub

04pics.pngSledujeme hodnoty identifikátorov jednotlivých súborov

Takže, čo sa to v makre odohralo? Najprv sme otvorili tri súbory. Číslovanie identifikátorov súborov išlo za sebou v podobe 1,2,3. Po uzavretí súborov sa stali identifikátory voľné a preto získal ďalší otvorený súbor identifikátor s hodnotou 1.

Námet na tento článok poslúžili tieto zdroje:
OpenOffice.org Macros Explained Third Edition, Andrew Pitonyak, page 175-176, dostupné online
Funkce FreeFile, help.libreoffice.org, dostupné online
Příkaz Open, help.libreoffice.org, dostupné online
Příkaz Close, help.libreoffice.org, dostupné online

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

Komentáře

user avatar Mik
Odpovědět
Programovanie makier v LibreOffice: Otváranie súborov (1) – príkazy Open a Close
5. 05. 2020, 18:49:34
Promiňte, teď budu mluvit jako "stará Dymáková" (Jiří Grygar - Okna vesmíru dokořán). K čemu je to dobré? Chtělo byto nějak zasadit do kontextu praxe.
Děkuji
user avatar Eduard Boldižár
Odpovědět
Re:Programovanie makier v LibreOffice: Otváranie súborov (1) – príkazy Open a Close
6. 05. 2020, 03:04:55
Manipulácia so súbormi je jedna z najpraktickejších a najpreferovanejších oblastí pri práci s LibreOffice. Možno túto oblasť tromfnú len tabuľky v LE Calc. Môžete otvárať, čítať alebo zapisovať akýkoľvek súbor, aj s koncovkou .odt. Takže nejde o tému s nejakou abstraktnou témou pre akademické hlavičky, ale skutočne je to téma do praxe.

Tiež ešte dodám, že ten, kto chce skutočne programovať makrá v LE, tak mu pomôžu aj tie menej populárne témy, ktorých je v mojom seriáli asi tiež dosť. Budem sa snažiť vyhýbať témam, ktoré sú moc akademické, ako napr. algoritmy a pod., i keď taký dobrý algoritmus na triedenie by mal vedieť každý programátor, nielen múdre hlavičky niekde vo vedeckom ústave. :-)
user avatar kamlan
Odpovědět
Re:Re:Programovanie makier v LibreOffice: Otváranie súborov (1) – príkazy Open a Close
6. 05. 2020, 11:54:06
Já čtu vaše články rád, byť zpočátku mi to připadalo spíše jen jako defakto o něco více rozepsaná Nápověda. Nicméně dodáváte tam nějaké věci které již v Nápovědě pro ty příkazy nejsou, něco rozvedete více, uvedete příklady - za mě pěkné.
Já téměř vše co jsem si přečetl z Nápovědy beztak zapomněl - a to ji otevírám každou chvíli a zase zapomínám :-). To co dodáte navíc do článku je kolikrát pro mně příjemné zjištění - jako třeba v tomto že Close může uzavřít více souborů najednou tím, že se mu připíší identifikátory prostě do řádku za sebou (Close #id1 #id2 #id3). Pravděpodobně jsem to sice někde již viděl, ale nevěnoval jsem tomu třeba tehdy pozornost, neb jsem to třeba na nic nepotřeboval.

Nesestavujete - nebo nechystáte se - z vašich článků udělat třeba jedno PDF jak to má A. Pitonyak nebo jako třeba Malá makra J. Pasterieka? Má zkušenost je, že takováto PDF se velmi rychle otevírají a dobře prohledávají, fungují offline a nemusí na něco člověk proklikat třeba i několik webů a zkoumat jestli v nějakém dalším odkazu to zrovna bude ono.
Mám třeba na disku uloženou již docela pěknou hromadu různých HTML stránek s různými příklady na makra, ale to už se prohledává fakt špatně, zlaté jedno pořádně zpracované PDF. To samý v modulech v Basicu, hromada příkladů na něco co jsem zkoušel a už se v tom sám pořádně nevyznám. Zmiňujete třídící algoritmy - tak třeba se někdy dostanu k tomu to nějak setřídit, ale věru na to nyní nemám čas ani chuť. Též mě napadá, že na takovéhle třídění jaké bych potřeboval (asi nejen já) s různými postahovanými příklady, očividně známý algoritmus není :-). Známé jsou ty na jasně daná data, ale na ta všelijak zabordelená kde už člověk přestal i tušit co je vlastně co ... tam to z hlediska časové náročnosti dává tušit spíš fiasku potenciálního tříditele a tedy ani nepouštění se do toho :-).

Co se týká tématiky práce se soubory, jsem zvědav jestli to pojmete komplexně a uvedete třeba i otevírání souborů s různými kódováními (CP1250, Latin2, UTF8, UTF16 apod.) - na to už Open nestačí a jsou na to potřeba streamy (alespoň co já vím).
A jelikož jste zmínil otevírání ODT souborů, tak ty je potřeba nejdříve rozzipovat a teprve potom z nich načítat třeba jednotlivé podsoubory. ZIPování je sice již docela pokročilá práce se soubory, ale téma by tak bylo popsáno alespoň kompletně :-).

Držím palce do dalších článků.
user avatar Eduard Boldižár
Odpovědět
Re:Re:Re:Programovanie makier v LibreOffice: Otváranie súborov (1) – príkazy Open a Close
6. 05. 2020, 15:19:12
Vďaka za podporu. :-)

Áno, snažím sa robiť články tak, aby mali nejakú pridanú hodnotu a nebolo to ako z nejakého nudného manuálu.

Čo sa týka pdf, nie ste prvý, ktorý sa to pýta. Dávnejšie som urobil skript napísaný v bash shell, ktorý zoberie moje články a spojí ich do jedného pdf súboru. Bolo to pre kamaráta a mám to stále niekde uložené vo svojom HDD. Skúsim ho pohľadať, dokončím ho o nové články a zverejním ho v github a odkaz pripnem pod týmto článkom. Súčasťou projektu v github bude aj výsledne pdf, takže ani nebude treba spúšťať skript. Budem sa ho stále snažiť aktualizovať pri ďalších článkoch. Môže byť?
user avatar kamlan
Odpovědět
Re:PDF
6. 05. 2020, 16:25:28
S tím PDF by to tak bylo super, stejně tak když bude aktualizované třeba po každém článku :-).

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