...
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
INIT
REAL _sum
LOOP_TEMPLATE_START #LOOP_TEMPLATE_PAR#, 1, H.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 | ||||
|---|---|---|---|---|
| ||||
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#]^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 | ||||
|---|---|---|---|---|
| ||||
INIT REAL _max _max := H.Struct[15]^Voltage ; inicializacia (predpokladáme, že štruktúra má aspoň 1 riadok) 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 |
...