PPWizard – programování vlastních rexx kódů
PPWizard umožňuje vkládat do skriptů i programové kódy jazyka Rexx, díky čemuž se stává velmi silným nástrojem, který není svázán počtem svých vlastních funkcí. Tento článek je takovým malým výletem do jazyka Rexx a jeho praktického využití při generování WWW stránek.
Opakování
Opakování částí kódu (takzvané smyčky) můžete najít v programovacích jazycích pod pojmy for
, repeat
, while
a jinými. Základní konstrukce pro opakování neabsentuje ani v repertoáru funkcí PPWizardu samotného:
#{
Opakovaná část.
#}
Kdybychom v našem kódu tuto konstrukci uvedli, druhý řádek Opakovaná část
by byl nerušeně zapisován do výstupního souboru až do zaplnění diskové kapacity. Naštěstí máme k dispozici dvě možnosti, jak opakování řídit:
- V opakované části můžeme použít příkaz
#break
pro ukončení celého opakování, nebo příkaz#continue
pro ukončení právě běžícího cyklu a skok na další cyklus. Oba tyto příkazy se většinou používají ve spojitosti s příkazem#if
a rexx proměnnými. - Na prvním řádku, za příkazem
#{
, můžete použít rexx příkazyfor()
acase()
. Upozorňuji, že zde nejde o příkazy PPWizardu, ale o přímé volání rexx interpretu.
Dále se zaměříme na druhou možnost, přičemž po prostudování tohoto článku byste neměli mít problém ani s bodem jedna.
V předchozím článku jsme načítali data z CSV souborů do datového pole, které jsme pak postupně zpracovávali právě cykly. Zde je příslušný kus kódu:
#{ FOR @@Record = 1 to <?Data:TmpCsv.?>
#if @@Record // 2 = 0
#RexxVar class = „sr“
#else
#RexxVar class = „lr“
#endif
<tr class=“<??class>“>
<td><?Data:TmpCsv.@@Record.1></td>
<td class=“num“><?Data:TmpCsv.@@Record.2></td>
<td class=“num“><?Data:TmpCsv.@@Record.3></td>
</tr>
#}
Datové pole TmpCsv obsahuje čistě tabulková data, která chceme vypsat do HTML tabulky. Na prvním řádku spouštíme opakování. Funkce for()
zde způsobí, že na počátku prvního cyklu je inicializována rexx proměnná @@Record s hodnotou 1 a před každým dalším cyklem je zvýšena o jedničku. Jakmile dosáhne hodnoty počtu řádků datového pole TmpCsv, je celé opakování ukončeno.
Na druhém řádku můžete vidět, že lze rexx funkce vyvolávat i přímo v podmínce. Tady dělíme hodnotu proměnné @@Record dvěma a zároveň vyhodnocujeme, zda je tento podíl roven nule. Pakliže je, přiřazujeme funkcí #RexxVar
proměnné class hodnotu „sr“ (sudý řádek), v opačném případě hodnotu „lr“ (lichý řádek).
Poté začneme vypisovat obsah řádku tabulky. Hodnotu proměnné class vyvoláváme standardní definicí <??class>
. Při vyvolávání první hodnoty řádku určeném proměnnou @@Record v datovém poli TmpCsv používáme standardní definici <?Data:TmpCsv.@@Record.1>
.
V příkladu používáme rexx funkce na následujících místech:
- Za příkazem
#{
jsou povolené funkcefor()
acase()
. - V podmínce
#if
můžete používat základní matematické operátory (Rexx Expressions) a samozřejmě nesmíte zapomenout na operátor podmínečný (Rexx Conditional Logic). - Základní matematické operátory jsou povolené i v zabudovaném příkazu
#rexxVar
, určeném k definici rexx proměnné.
#defineRexx
Jak asi cítíte, ve výše jmenovaných případech jsem byli v programovacích možnostech omezeni. Pokud chceme ve skriptech použít skutečný komplikovanější rexx kód bez jakýchkoli omezení, použijeme funkci #defineRexx
. Jako její parametr můžeme zadat jméno makra, pod kterým má být sada rexx příkazů registrována a později vyvolána. Pokud necháme parametr prázdný, jsou příkazy provedeny ihned.
V našem ukázkovém webu, v souboru mauris.it, používáme příkaz #defineRexx
hned na několika místech. Nejprve převedeme příkazem Files4Mask()
do datového pole photos seznam fotografií v adresáři určeném makrem photodir:
#DefineRexx “
call Files4Mask „.<$photodir>*.jpg“, „photos“,,“Y“
#DefineRexx
Poté postupně všechny obrázky do dokumentu vložíme:
#{ for num = 1 to photos.0
<$image file=“<??photos.num>“>
#}
Samotnému vkládání samozřejmě předchází definice makra pro vložení jednoho obrázku:
#(
#define image
#defineRexx “
size = GetImageHeightWidth(‚{$file}‘);
alt = FilePart(‚name‘, ‚{$file}‘);
src = alt;
#defineRexx
<img src=“<$photodir>/<??src>“ alt=“<??alt>“ <??size>>
#)
V makru image ukládáme do proměnné size řetězec width="x" height="y"
, který generuje funkce GetImageHeightWidth()
, a do proměnné alt jméno souboru. To získáme funkcí FilePart()
. Nakonec vložíme samotný HTML kód, přičemž proměnné vyvoláváme standardními definicemi <??promenna>
.
#evaluate
Příkazem #evaluate
můžeme definovat makro, které provede jeden nebo více rexx příkazů. Pokud necháme jméno prázdné, spustí se příkazy přímo na svém místě (stejně jako u příkazu #defineRexx
). Funkce #evaluate
je ale omezenější a prakticky se používá spíše pro vyvolání sady příkazů definovaných funkcí #defineRexx
.
Pro názornost si prohlédněte následující čtyři příklady, které se liší formou, ale nikoli funkcí:
#DefineRexx “
call Files4Mask „.<$photodir>*.jpg“, „photos“,,“Y“
#DefineRexx
#evaluate “ ^call Files4Mask „.<$photodir>*.jpg“, „photos“,,“Y“^
#DefineRexx ‚nacti‘
call Files4Mask „.<$photodir>*.jpg“, „photos“,,“Y“
#DefineRexx
#evaluate “ ‚<$nacti>
#(
#define nacti
#DefineRexx “
call Files4Mask „.<$photodir>*.jpg“, „photos“,,“Y“
#DefineRexx
#)
<$nacti>
Datum a čas
Pěkná praktická kouzla lze v PPWizardu provádět s datem a časem. Časové údaje zapisujeme v implicitním formátu YYYYMMDDHHMMSS
, který pak usměrňujeme rexx funkcí FormatTime()
.
Představte si, že budujeme informační web typu Interval.cz, na kterém budou pravidelně vycházet články, u kterých chceme vypisovat datum a čas vydání. Ve společném souboru pro celý web definujeme makro vydano, zpracovávající datum a čas předávaný jako parametr:
#define CZECH_MONTH_NAMES_LONG ledna února března dubna května června července srpna září října listopadu prosince
#(
#define vydano
Vydáno:
<?=FormatTime(‚%e. %B %Y, %!:%M‘, ‚{$#1}‘, ‚CZECH‘)>
#)
Makro pak vyvoláme v článku na příslušném místě <$vydano "200408280018">
.
Na prvním řádku vidíte definici makra CZECH_MONTH_NAMES_LONG
. Jméno není náhodné, ale přesně vyhrazené pro seznam jmen měsíců vypisovaných funkcí FormatTime()
. (Vyhrazená makra a konfigurační řady byly vysvětleny v článku PPWizard – práce s daty v externích souborech u popisu funkce #import.) K dispozici máme dále vyhrazená makra pro zkrácená jména měsíců, dlouhá i zkrácená jména dnů, rozlišení dopoledních a odpoledních hodin a podobně. V definici makra vydano vidíte další možnost, jak lze dále vyvolat rexx funkci, tentokráte standardní definicí.
Funkce FormatTime()
má tři parametry:
- Výstupní formát data a času (v ukázce
%e. %B %Y, %!:%M
). - Datum a čas v implicitním formátu (v ukázce
{$#1}
). - Konfigurační řada (používá se pak na začátku jména vyhrazených maker).
Tento článek o implementaci rexx programových kódů do skriptů PPWizardu berte spíše jako takový velmi letmý výlet do problematiky, která by sama o sobě vydala na celou knihu. Byl bych rád, kdybyste se v komentářích rozhovořili o konkrétních problémech, se kterými si nevíte ve svých skriptech rady. Budou-li zajímavé a bude-li jejich řešení obecně přínosné, pokusím se je v dalším článku předložit jako praktické ukázky.
Odkazy, zdroje
- #{ – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #Break – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #Continue – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #DefineRexx – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #evaluate – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #RexxVar – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- <?=RexxExpression> – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- Matematické rexx operátory – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- O jazyku rexx – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- Podmínkové rexx operátory – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- Práce s časem, funkce FormatTime() – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- Rexx proměnné – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- Seznam rexx funkcí – Dennis Bareis (PPWizard manual, 30. 7. 2004)
Mohlo by vás také zajímat
-
Co je to VRAM a jak ji navýšit bez drahého upgradu?
20. srpna 2024 -
Zvýšení výkonu WiFi signálu: Jak a proč používat WiFi zesilovače
28. června 2023 -
Jak si vyzkoušet Apple Intelligence v EU
2. srpna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024