Rozšírená syntax pre výrazy počítaných bodov a vypočítaných archívnych objektov
Nasledujúca kapitola popisuje syntax použiteľnú vo výrazoch objektov typu Počítaný bod a výrazoch objektov typu Archivovaná hodnota.
Inicializačná časť
Inicializačná časť začína kľúčovým slovom INIT. V tejto časti je možné používať:
- deklarácie lokálnych premenných,
- návestia,
- príkazy GOTO návestie:
- príkazy IF podmienka GOTO návestie:
- pričom návestie musí byť vždy ukončené znakom ":" (aj v príkazoch GOTO),
- príkazy na základe podmieneného vyhodnocovania:
IF podmienka1 THEN
akcia1
ELSIF podmienka2 THEN
akcia2
ELSIF podmienka3 THEN
akcia3
.....
ELSE
akcia
ENDIF - príkaz RETURN ukončí výpočet a priradí výsledku hodnotu (konštantu alebo výraz) za príkazom RETURN,
- príkaz EXIT spôsobí skok na časť FINALLY.
Inicializačná časť je nepovinná. Ak nie je uvedená, platí pôvodná syntax.
Ak je uvedená, samotný
výraz, ktorý určuje hodnotu výrazu objektu, je uvedený za kľúčovým slovom FINALLY.
Obmedzenia
V systéme D2000 je obmedzený počet vykonávaných riadkov. V súčasnosti nie je možné tento počet nastaviť
alebo zmeniť.
Počet vykonávaných riadkov (ExecuteRows) závisí od typu procesu.
Pre proces
D2000 Calc:
- ExecuteRows > 1000 - do logovacieho súboru procesu D2000 Calc(calc.log) sa zapíše záznam: "Meno_PocitanehoBodu - executed rows : pocet_riadkov"
- ExecuteRows > 100 000 - systémová premenná SystemError nadobudne hodnotu: "Meno_PocitanehoBodu - infinite loop"
Pre proces D2000 Archiv:
- ExecuteRows > 1000 - do logovacieho súboru procesu D2000 Archiv (archiv.log) sa zapíše záznam: "Meno_ArchivovanejHodnoty - executed rows : pocet_riadkov"
- ExecuteRows > 10 000 - systémová premenná SystemError nadobudne hodnotu: "Meno_ArchivovanejHodnoty - infinite loop"
Ak sa do premennej daného typu priraďuje hodnota iného typu, pri vykonávaní výrazu nastane runtime error, ktorý zastaví vyhodnocovanie skriptu (ďalšie riadky ostanú nevyhodnotené) a ako výsledok vráti vždy hodnotu Invalid. Pre zobrazenie chyby je potrebné mať zapnuté "debug runtime errors".
Výnimkou sú povolené konverzie:
- vzájomná konverzia HBJ - Integer,
- vzájomná konverzia Relatívny čas - Real - Integer,
- jednosmerná konverzia z Boolean na Relatívny čas, Real alebo Integer.
Príklad 1
V uvedenom príklade sa počíta suma hodnôt zo stĺpca A2 štruktúrovanej premennej SV. Do sumy sa zarátavajú len hodnoty z riadkov, v ktorých hodnota v stĺpci A1 je väčšia alebo rovná 3.
INIT
INT _rows
INT _rowNr
REAL _suma
_rows := SV.A\DIM
_suma := 0.0
START:
_rowNr :=1
CYKLUS:
IF SV.A[_rowNr]^A1 < 3 GOTO SKIP:
_suma := _suma + SV.A[_rowNr]^A2
SKIP:
_rowNr := _rowNr + 1
IF _rowNr <= _rows
GOTO CYKLUS:
FINALLY
_suma
Príklad 2
V príklade je zobrazované poradie tretiny bežiacej minúty - troma spôsobmi návratu hodnoty.
INIT
INT _tretina
IF Sec <=
20 THEN
RETURN 1
ELSIF Sec <=
40
THEN
_tretina := 2
RETURN _tretina
ELSE
_tretina := 3
EXIT
ENDIF
FINALLY
_tretina
V oboch príkladoch bude časová značka hodnoty výrazu nadobúdať hodnotu času, kedy bol výraz vyhodnotený. Ak má výraz nadobúdať inú hodnotu časovej značky, ako čas vyhodnotenia výrazu, je potrebné ju zadať vo výraze (za vymenovaným slovom FINALLY!) .
Napríklad:
FINALLY
%NtV(_suma, _time)
Pre definovanie užívateľských príznakov výslednej hodnote výrazu, je potrebné definíciu užívateľského príznaku definovať vo výraze.
Napríklad:
FINALLY
%SetFlags(_suma, @A, _boolean)
Súvisiace stránky:
Add Comment