Porovnávané verzie

Kľúč

  • Tento riadok sa pridal
  • Riadok je odstránený.
  • Formátovanie sa zmenilo.

...

Prvá možnosť je jednoduchá ale prácna (najmä ak má štruktúrovaná premenná väčší počet riadkov), navyše pri zmene rozmeru štruktúrovanej premennej je nutné výrazy ručne upravovať. Preto vznikla bola implementovaná druhá možnosť, ktorá v podstate znamená napísanie napísanie makra v rámci vypočítaného archívu. Toto makro D2000 Archív rozvinie a skompiluje pri štarte, ale aj automaticky pri zmene rozmeru zdrojových archívov (v dôsledku zmeny rozmeru štruktúrovanej premennej), takže nie sú nutné úpravy vypočítaného archívu.
Pozn: pri Pri zápise je nutné použiť Rozšírenú syntax pre výrazy (obsahujúcu INIT a FINALLY ako aj podporujúcu lokálne premené). 

...

Blok kódu
languageesl
themeConfluence
LOOP_TEMPLATE_START #LOOP_TEMPLATE_PAR#, low_range, high_range

;ľubovolný kód, ktorý môže obsahovať #LOOP_TEMPLATE_PAR# ako index štruktúrovaného archívu, napr. pre implementáciu sumy
; _sum := _sum + H.Struct[#LOOP_TEMPLATE_PAR#]^Current

LOOP_TEMPLATE_END

...

high_range je konštanta alebo názov štruktúrovaného archívneho objektu (v tom prípade sa nahradí počtom riadkov).

Všetok kód medzi LOOP_TEMPLATE_START a LOOP_TEMPLATE_END sa "rozvinie" pre opakovania #LOOP_TEMPLATE_PAR# od low_range do high_range

Poznámka: Nie je podporené vnorenie (LOOP_TEMPLATE_START vnútri LOOP_TEMPLATE_START), ale jeden vypočítaný archív môže obsahovať viacero LOOP_TEMPLATE konštrukcií.


Príklady:

Suma hodnôt zo stĺpca

...

H.Struct^Current (je ošetrené spracovanie iba platných hodnôt - viď použitie atribútu \VLD)

Blok kódu
languageesl
themeConfluence
INIT
REAL _sum
LOOP_TEMPLATE_START #LOOP_TEMPLATE_PAR#, low_range1, high_rangeH.Struct

IF H.Struct[#LOOP_TEMPLATE_PAR#]^Current\VLD THEN
  _sum := _sum + H.Struct[#LOOP_TEMPLATE_PAR#]^Current
ENDIF

LOOP_TEMPLATE_END

FINALLY
_sum


Hľadanie maxima zo stĺpca H.Struct^Voltage

Blok kódu
languageesl
themeConfluence
INIT
REAL _max
_max := H.Struct[1]^Voltage	 ; inicializacia (predpokladáme, že štruktúra má aspoň 1 riadok)

LOOP_TEMPLATE_START #LOOP_TEMPLATE_PAR#, 1, H.Struct

IF H.Struct[#LOOP_TEMPLATE_PAR# low_range, high_range]^Voltage\VLD & H.Struct[#LOOP_TEMPLATE_PAR#]^Voltage > _max THEN
  _max := H.Struct[#LOOP_TEMPLATE_PAR#]^Voltage
ENDIF

LOOP_TEMPLATE_END

FINALLY
_max


Hľadanie maxima zo stĺpca H.Struct^Voltage (iba riadky 5 - 30)

Blok kódu
languageesl
themeConfluence
INIT
REAL _max
_max := H.Struct[5]^Voltage

LOOP_TEMPLATE_START #LOOP_TEMPLATE_PAR#, 5, 30

IF H.Struct[#LOOP_TEMPLATE_PAR#]^Voltage\VLD & H.Struct[#LOOP_TEMPLATE_PAR#]^Voltage > _max THEN
  _max := H.Struct[#LOOP_TEMPLATE_PAR#]^Voltage
ENDIF

LOOP_TEMPLATE_END

FINALLY
_max

...