使用查询结果控制 ECL 循环宏
Controlling ECL loop macro using results of a query
我们正在尝试编写一个带有中断功能的循环宏。基本上我们想重复某个动作直到 X(从数据集派生)为真。但是编译器似乎不喜欢这种方法 (returns 'Constant expression expected') 所以我们想知道是否有已知的解决方法?
下面提供了一个完全人为的例子,调用者:
LoopFunction(5);
来自 BWR window。
EXPORT LoopFunction(NMax = 5) := MACRO
Rec := RECORD
INTEGER i;
END;
#DECLARE(i);
OUTPUT(DATASET([1], REC), ,'~TEMP::MB::LOOPTEST' + %i%, COMPRESSED, OVERWRITE);
#SET(i, 2);
shouldIbreak := DATASET('~TEMP::MB::LOOPTEST' + (%i% - 1), Rec, THOR);
#LOOP
OUTPUT(shouldIbreak +DATASET([%i%], REC), ,'~TEMP::MB::LOOPTEST' + %i%, COMPRESSED, OVERWRITE);
#SET (i, %i%+1);
#IF (COUNT(shouldIbreak) > Nmax);
#BREAK
#END
#END
ENDMACRO;
我们正在尝试编写一个带有中断功能的循环宏。基本上我们想重复某个动作直到 X(从数据集派生)为真。但是编译器似乎不喜欢这种方法 (returns 'Constant expression expected') 所以我们想知道是否有已知的解决方法?
下面提供了一个完全人为的例子,调用者:
LoopFunction(5);
来自 BWR window。
EXPORT LoopFunction(NMax = 5) := MACRO
Rec := RECORD
INTEGER i;
END;
#DECLARE(i);
OUTPUT(DATASET([1], REC), ,'~TEMP::MB::LOOPTEST' + %i%, COMPRESSED, OVERWRITE);
#SET(i, 2);
shouldIbreak := DATASET('~TEMP::MB::LOOPTEST' + (%i% - 1), Rec, THOR);
#LOOP
OUTPUT(shouldIbreak +DATASET([%i%], REC), ,'~TEMP::MB::LOOPTEST' + %i%, COMPRESSED, OVERWRITE);
#SET (i, %i%+1);
#IF (COUNT(shouldIbreak) > Nmax);
#BREAK
#END
#END
ENDMACRO;