首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用查询结果控制ECL循环宏

使用查询结果控制ECL循环宏
EN

Stack Overflow用户
提问于 2016-10-17 13:52:04
回答 2查看 220关注 0票数 4

我们正在尝试编写一个具有中断函数的循环宏。基本上,我们希望重复某个特定的操作,直到X(从数据集派生)为真为止。然而,编译器似乎不喜欢这种方法(返回“预期的常量表达式”),所以我们想知道是否有一个已知的解决方法?

下文提供了一个完全人为的例子,称为:

代码语言:javascript
复制
LoopFunction(5);  

从BWR窗口。

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-24 07:53:26

这是可以使用循环()命令,您可以指定一个中断条件在那里。请参阅(平庸)文档这里和博客文章这里

票数 1
EN

Stack Overflow用户

发布于 2018-08-05 23:30:43

您不能在模板语言代码上具有运行时依赖关系(例如,从逻辑文件加载的数据集),因为模板语言指令是由编译器处理的,目的是生成ECL代码。

您可以使用数据集,但前提是它们是常量表达式(例如内联数据集)。

将模板语言看作C中的宏。如果您确实需要基于运行时依赖关系生成代码,那么可以解决的方法是编写一个函数,用代码生成STRING,然后使用SOAPCALL将其提交到集群中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40088244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档