www.PalmHelp.cz

Tabulky programem Pilot-DB (2. část)
Publikováno: 29.03.2005
Téma: Software


Dnes se dostaneme k nejdůležitější vlastnosti a tím je možnost operací s jednotlivými hodnotami položek a to jak v jednom záznamu tak i mezi záznamy.
Stručně si projdeme argumenty, které lze ve skriptu použít.



Tabulka s výpočtem (script)


Nejdříve operátory (v závorce vždy příklad):
Libovolné číslo (3.2), desetinná čárka může být jak tečka tak i čárka, podle nastavení počítače.
Celé číslo (17)
Řetězec (Ahoj)
Čas (20:04), čas se udává ve 24hodinovém formátu a oddělený dvojtečkou.
Datum (8/5/05), měsíc lomeno den lomeno rok.
Odkaz na položku: %[int], asi nejdůležitější operátor, kde int je pořadové číslo položky.

Tyto operátory lze použít pro následující operace:
Matematické operace
Sčítání: + [a] ... [b]
Násobení: * [a] ... [b]
Dělení: / [a] ... [b]
Operace porovnání:
Shoda: eq [a] [b], vrátí pravda pokud se čísla schodují.
Menší než: lt [a] [b], vrátí pravda pokud a je menší b.
Vetší než: gt [a] [b], vrátí pravda pokud a je větší b.
Menší nebo rovno: le [a] [b], podobně výše.
Větší nebo rovno: ge [a] [b], podobně výše.
Operace s řetězci
Schoda řetězce: seq [a] [b], vrací pravda, pokud jsou řetězce schodné.
Částečná shoda: sstr [a] [b], vrací pravda, pokud [a] v sobě obsahuje [b].
Práce s časovými údaji:
Dnešní datum: gcd, výsledkem je aktuální datum.
Převod na celé číslo: int [a], převede čas, nebo datum na celé číslo.
Doba trvání: dur [a], celočíselná hodnota bude interpretována jako počet minut od půlnoci 1.1 1904 a bude zobrazena jako dny, hodiny a minuty.
Ostatní:
Negace: ![arg], obrací výsledek [arg], pravda/nepravda.
Podmínka: ? [test] [t] [f], pokud je [test] pravda, výsledek bude [t], jinak [f].
Větvení: br [b] [res-0] ... [res-n], [b] musí být typu integer (celé číslo). Pokud je [b] <= 0, bude výsledek [res-0], pokud je [b] >=n, bude výsledek [res-n], jinak bude výsledkem výraz v pozici dané [b] (pozice jsou číslovány od nuly).
Proveď vše: all [a] ... [n], provedete všechny argumenty a jako výsledek je předán výsledek posledního argumentu.
Logické Or: or [a] ... [n], výsledkem je 1 pokud jeden nebo více argumentů skončí s hodnotou pravda, jinak je výsledek 0.
Logické And: and [a] ... [n], výsledkem je 1 pokud všechny argumenty skončí s hodnotou pravda, jinak je výsledek 0.
Náhodné číslo: rand, vygeneruje celé (integer) náhodné číslo větší než 0.

Každý výpočet musí být i se svými operátory uzavřen do kulatých závorek. Teď si prohlédněte dva příklady:
Nejjednodušší je asi součet dvou položek: (+ %0 %1).
Složitější už je součet položky 0 a položky 1, která je vynásobena čtyřmi: (+ %0 (* %1 4)


Operace mezi záznamy
Nyní se podíváme na podivuhodnou vlastnost popisovaného programu. Výše jsme si popsali výpočty s položkami v jednom záznamu a nyní se podíváme na to, jak lze počítat i mezi jednotlivými záznamy. K výše uvedeným argumentům nám přibudou dva, určené právě pro operace mezi záznamy.
Přerovnání; sort [fld] [up?], [fld] je pořadové číslo položky, podle které bude prováděno řazení položek a druhý argument [up?] určuje, zdali bude řazení prováděno vzestupně (1) nebo sestupně (0).
Položka v záznamu: ffr [fld] [off] [d]; zde se určuje, s jakým záznamem budeme pracovat. První [fld] je číslo položky se kterou budeme pracovat, druhý [off] je tzv. offset záznamu, který určuje o kolik záznamů zpátky nebo dopředu je záznam, o který se zajímáme ve výpočtu. Pokud je vyplněn třetí argument [d], bude použita jeho hodnota, pakliže není nalezen odpovídající záznam (default).
Tyto dva argumenty se musí vždy, když budeme operovat mezi záznamy, vyskytovat za sebou. Zde je pro příklad takový skript:
(sort 1 1)(+ %0 (ffr 1 1))
Tento skript nejdříve srovná záznamy v databázi podle druhé položky (položka č. 1) a to vzestupně (od nejmenší po nejvyšší) a přičte k položce č. 0 obsah položky č. 1 v následujícím záznamu.

Příklad
Takto to vypadá velmi těžkopádně, proto si budeme muset vyzkoušet jednoduchou databázi.

Na prvním obrázku je vidět, jaký je potřeba vytvořit design databáze, na druhém je vidět skript pro výpočet (sort 0 1) (+ (? (seq (ffr 0 -1 na) %0) (ffr 2 -1 0) 0) %1). A na třetím obrázku je výsledek, kdy je zřejmé, že se sčítají jednotlivé hodnoty položky č. 1 pro jednotlivé osoby a to podle jména uvedeného v položce 0.
Nyní si pro lěpší pochpeníi podrobněji projdeme skript.
Nejdříve dojde k setřídění záznamů dle jména osoby (sort 0 1).
V takto setříděných záznamech pomocí (ffr 0 -1 na) zjistíme jméno osoby (pokud není nic tak bude "na") a to potom porovnáme se jménem v aktuálním záznamu (seq (ffr 0 -1 na) %0). A pokud souhlasí, dojde k sečtení obsahu položky č. 2 předcházejícího záznamu a obsahu položky č. 1 v aktuálním záznamu (+ (? (seq (ffr 0 -1 na) %0) (ffr 2 -1 0) 0) %1). Jak prosté.




Předchozí část článku: Tabulky programem Pilot-DB (1. část)
Následující část článku: Tabulky programem Pilot-DB (3. část)



Tento článek si můžete přečíst na webu www.PalmHelp.cz
http://www.palmhelp.cz/html

Tento článek najdete na adrese:
http://www.palmhelp.cz/html/modules.php?name=News&file=article&sid=101