2016-10-17 17 views
4

ブレイク機能を持つループマクロを作成しようとしています。基本的には、X(データセットから派生したもの)が真になるまで、特定のアクションを繰り返すことを望みます。コンパイラはこのアプローチが気に入らないようです( 'Constant expression expected'を返す)ので、既知の回避策があるかどうか疑問に思っていましたか?クエリの結果を使用してECLループマクロを制御する

完全に人工的な例は、以下に提供することによって呼び出される。

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; 

答えて

0

これはHPCC V5では不可能なので、コンパイラはそれを気に入らないだけです。私はまだV6で試してみる機会がありませんでしたが、私は同じ問題があると考えています(HPCCの皆さんからアップグレードが私を助けてくれると言った人はいません)。

関連する問題