Programovanie makier v LibreOffice: Textové reťazce (2)

LO.png V tomto článku pokračujeme s jednoduchou prácou s textovými reťazcami. Dozviete sa niečo nové o funkciách ako InStr, StrComp, Format, UCase a LCase.  

Vyhľadávanie v textovom reťazci

V textovom reťazci môžeme nájsť žiadaný sled znakov(slovo, veta a pod…) pomocou funkcie InStr. Príklad vám napovie viac.

1. príklad: Využitie funkcie InStr

Sub funkciaInStr REM začiatok procedúry
 Vstup = InputBox("Zadajte text") REM vstup od užívateľa 
 If InStr(1, Vstup, "vesmír", 1) > 0 Then REM využitie funkcie InStr
 MsgBox "Áno, reťazec vesmír existuje v texte" REM výstup na obrazovke
 End If REM koniec podmienky
 End Sub REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výsledok Výsledok

Rozbor makra: Funkciu InStr používame na zistenie hľadaného reťazca v texte. Prvý parameter funkcie InStr je pozícia zľava, odkiaľ má funkcia začať prehľadávať reťazec. Druhý parameter je v prípade nášho makra vstup od užívateľa. Tretí parameter funkcie je definovaný reťazec, ktorý hľadáme. Štvrtý parameter nám určuje, či funkcia zohľadňuje veľkosť písmen. V tomto parametri sú len dve stavy, 0 a 1.

Hodnotou 0 funkcii oznamujeme, že si má všímať veľkosť jednotlivých písmen. Hodnota 1 si veľkosť písmen nevšíma. Napríklad, v našom makre by sme štvrtý parameter z 1 pozmenili na 0 a napísali Vesmír, tak by nám reťazec nenašiel. Pretože hľadáme vesmír s malými písmenami. My sme ale zvolili hodnotu 1, takže veľkosť písmen sa neposudzuje.

Návratová hodnota funkcie InStr je pozícia (zľava) prvého znaku reťazca, ktorého hľadáme.

Porovnávanie reťazcov

Na porovnávanie reťazcov využívame funkciu StrComp. Jej využitie uvidíte v príklade číslo 2.

2. príklad: Využitie funkcie StrComp

Sub porovnatRetazce REM začiatok procedúry
 Vstup = InputBox("Zadajte text") REM vstup od užívateľa
 Select Case StrComp(Vstup, "dnešok") REM využitie funkcie StrComp
 Case -1
  MsgBox "Reťazec od používateľa je menší ako reťazec dnešok"
 Case 0
  MsgBox "Používateľ zadal reťazec dnešok"
 Case 1
  MsgBox "Reťazec od používateľa je väčší ako reťazec dnešok"
 End Select REM koniec podmienok
 End Sub REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výstup Výstup

Rozbor makra: Funkcia StrComp porovnáva dva reťazce. Prvý reťazec a zároveň prvý parameter funkcie StrComp je v našom makre vstupný údaj od užívateľa. Druhý parameter je reťazec, ktorý zvolíte vy.

Funkcia StrComp má tri návratové hodnoty. Ak je hodnota 0, tak vstupný reťazec je rovnaký ako definovaný reťazec v makre. Ak je hodnota -1, prvý reťazec (prvý parameter) je menší ako druhý reťazec.

Ak je hodnota 1, tak veľkosť prvého reťazca je väčšia ako u druhého reťazca. Veľkosť sa počíta od vzdialeností jednotlivých písmen v abecede. Čiže ak by sme mali dve slova, ktoré majú rovnaký počet písmen, rozhodovali by jednotlivé písmena podľa abecedy.

Funkcia Format

Pomocou funkcie Format vieme meniť formát čísel.

3. príklad: Využitie funkcie Formát

Sub funkciaFormat REM začiatok procedúry
 Vstup = InputBox("Zadajte ľubovoľné celé číslo") REM vstup od užívateľa
 cisloFormat = Format(Vstup, "0.00000") REM využitie funkcie Format
 MsgBox "Číslo po formátovaní: "&cisloFormat REM výpis na obrazovku
 End Sub REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výstup Výstup

Rozbor makra: S funkciou Format vieme meniť formát čísel. V treťom makre nahrádzame celé číslo do formátu čísla s piatimi desatinnými miestami.

Funkcie UCase a LCase

Potrebujete nutné zmeniť všetky písmena v reťazci z malých na veľké? Alebo naopak?

Využijeme na to funkcie UCase a LCase.

4. príklad: Využítie funkcie UCase a Lcase

Sub zmenaVelkostiPismen REM začiatok procedúry
 Vstup = InputBox("Zadajte ľubovoľný text") REM vstup od užívateľa
 naVelke = UCase(Vstup) REM využitie funkcie UCase
 naMale = LCase(Vstup) REM využitie funkcie LCase
 MsgBox "Reťazec zmenený na veľké písmena: "&naVelke REM výpis na obrazovku
 MsgBox "Reťazec zmenený na malé písmena: "&naMale 
 End Sub REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výstup – veľké písmena Výstup – veľké písmena

Výstup – malé písmena Výstup – malé písmena

(Jako ve škole) Průměr: 3.40 | Hodnotilo: 10
 

Komentáře

user avatar neutr
Odpovědět
Programovanie makier v LibreOffice: Textové reťazce (2)
3. 08. 2016, 09:49:33
Velmi pěkné - děkujeme.
Přes to bych malou poznámku měl. Bylo by vhodné popisované funkce přiblížit uživateli tak, že se porovnají s funkcemi sešitu.

Mnoho lidí totiž nejprve zvládne funkce sešitu a nakonec je zájem donutí k práci s makry. Pro tento typ lidí je vhodné právě například vytvořit relaci mezi InStr a FIND(), respektive SEARCH(). Relace by měla obsahovat i syntaktické odlišnosti. Takže uživatel by měl být připraven na odlišné postupy v Basicu od maximálně zjednodušených postupů u funkcí Calcu.

Někdy je nezbytností portovat do Basicu funkce sešitu, protože se dají naprogramovat jen velice obtížně, nebo vůbec. Takže zde by měl mít uřivatel možnost zjistit, že například FIND() lze přímo nahradit pomocí InStr() - synaxe s nulou a podobně.

Jako další bonus, respektive námět bych měl popis funkcí Calcu které není možné v Basicu zadat. Ačkoliv to vypadá divně, tak například pro funkci sešitu CHAR() a CODE() není ekvivalent. Jsou zabudovány jen fukce ASC - což je ekvivalent k funkci sešitu UNICODE() a podobně CHR() k funkci UNICHAR(). Takové funkce je potřebné portovat - tím myslím volat z Basicu jako rutinu.
Existuje ještě nouzový postup přes načtení do listu. Vložíme do listu kamkoliv vzorec sešitu, načteme výsledek do proměnné a buňku se vzorcem smažeme.

Ukázka portovaných funkcí CHAR() a CODE()
'----------------------------------------------------------------
Function CHAR_(X As single) as string
dim args(0) as single
args(0) = X
scalc = createUnoService( "com.sun.star.sheet.FunctionAccess")
CHAR_ = scalc.CallFunction( "CHAR", args )
End Function
'----------------------------------------------------------------
Function Code_(S As string) as integer
dim args(0) as string
args(0) = S
scalc = createUnoService( "com.sun.star.sheet.FunctionAccess")
Code_ = scalc.CallFunction( "CODE", args )
End Function
'----------------------------------------------------------------

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