我们正在尝试编写一个具有中断函数的循环宏。基本上,我们希望重复某个特定的操作,直到X(从数据集派生)为真为止。然而,编译器似乎不喜欢这种方法(返回“预期的常量表达式”),所以我们想知道是否有一个已知的解决方法?
下文提供了一个完全人为的例子,称为:
LoopFunction(5); 从BWR窗口。
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;发布于 2018-08-05 23:30:43
您不能在模板语言代码上具有运行时依赖关系(例如,从逻辑文件加载的数据集),因为模板语言指令是由编译器处理的,目的是生成ECL代码。
您可以使用数据集,但前提是它们是常量表达式(例如内联数据集)。
将模板语言看作C中的宏。如果您确实需要基于运行时依赖关系生成代码,那么可以解决的方法是编写一个函数,用代码生成STRING,然后使用SOAPCALL将其提交到集群中。
https://stackoverflow.com/questions/40088244
复制相似问题