Having changed
IIf(IsNull(myforeign), Count, Count++);
into
Count = Count + IIf(IsNull(myforeign), 1, 0);
is not working either.
It really seems like IsNull function doesn't return True for empty
symbols.
New entire code below
// EmptySymbols finder
// retrive comma-separated list of symbols
// from Group 0
list = CategoryGetSymbols(categoryGroup, 0);
Count = 0;
for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
{
SetForeign(sym);
myforeign = C;
RestorePriceArrays();
//if the symbol is empty Count is not increased
Count = Count + IIf(IsNull(myforeign), 1, 0);
_TRACE("symbol " + sym);
_TRACE("Count " + Count);
_TRACE("IsNull " + IsNull(myforeign));
}
--- In [email protected], "Mike" <[EMAIL PROTECTED]> wrote:
>
> Actually, you are running into a documented side effect of IIF
usage.
>
> Specifically; the IIF statement always executes BOTH the true and
the
> false branches of the code. So, you will always have your Count++
code
> executed regardless of the value of the IsNull expression.
>
> Refer to the user guide for details:
> http://www.amibroker.com/guide/afl/afl_view.php?id=72
>
> Mike
>
>
> --- In [email protected], "Paolo Cavatore" <pcavatore@>
> wrote:
> >
> > Does anyone know how to skip empty symbols when looping through a
> > list of them?
> >
> > The code below shows that IsNull function doesn't return TRUE for
> > empty symbols.
> >
> > Thanks,
> >
> > paolo
> >
> > // EmptySymbols finder
> > // retrive comma-separated list of symbols
> > // from Group 0
> > list = CategoryGetSymbols(categoryGroup, 0);
> >
> > Count = 0;
> >
> > for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
> > {
> > SetForeign(sym);
> > myforeign = C;
> > RestorePriceArrays();
> >
> > //if the symbol is empty Count is not increased
> > IIf(IsNull(myforeign), Count, Count++);
> > _TRACE("symbol " + sym);
> > _TRACE("Count " + Count);
> > _TRACE("IsNull " + IsNull(myforeign));
> >
> > }
> >
>