FIND_TRUE
Akcia FIND_TRUE
Funkcia
Akcia hľadá hodnotu riadiacej lokálnej premennej, pre ktorú daný výraz nadobudne hodnotu @TRUE.
Deklarácia
FIND_TRUE _index, maxIndex, _retCode, find_expressionParametre
_index | in/out | Identifikátor (lokálna premenná) typu Int. Riadiaca premenná pre výraz. |
maxIndex | in | Identifikátor (lokálna premenná) typu Int - maximálna hodnota riadiacej premennej. |
_retCode | out | Identifikátor typu Int - návratový kód. |
find_expression | in | Výraz typu Bool. |
Popis
Akcia postupne zvyšuje hodnotu lokálnej riadiacej premennej _index o +1. Pred každým zvýšením hodnoty vyhodnotí výraz find expression. Ak výraz nadobudne hodnotu @TRUE akcia končí a riadiaca premenná _index obsahuje danú hodnotu. Ak výraz nebude úspešne vyhodnotený (neplatné hodnoty, ....) premenná _retCode bude obsahovať typ chyby, ináč _ERR_NO_ERROR.
Maximálna hodnota premennej _index je daná parametrom maxIndex. Ak výraz find expression nenadobudne hodnotu @TRUE v celom povolenom rozsahu, po ukončení akcie bude mať premenná _index hodnotu maxIndex+1.
Je nutné, aby hodnota výrazu find expression závisela od hodnoty riadiacej premennej. Ak nie, akcia generuje chybu _ERR_LOCAL_VAR_NFOUND.
Ako vidieť v príklade, akciu je možné výhodne použiť pri prehľadávaní štruktúr.
Príklad:
RECORD (SD.RecordDef) _struct
INT _index
INT _maxIndex
INT _retCode
.......
; vyhľadanie riadku, ktorý obsahuje text "ahoj" v stĺpci Text
_index := 1 ; hľadám od prvého riadku
_maxIndex := _struct\DIM
FIND_TRUE _index, _maxIndex, _retCode, _struct[_index]^Text="ahoj"
IF _retCode # _ERR_NO_ERROR THEN
; na riadku _index nastala chyba _retCode
ELSIF _index = _maxIndex+1 THEN
; požadovaný riadok sa nenašiel
ELSE
; riadok _index obsahuje text "ahoj" v stĺpci Text
ENDIF Súvisiace stránky: