Datafilter select where の解析から抽出された列を参照する別の用途でデータ フィルター インターフェイスを使用したい。
次に、「select where」句を解析し、そこにある情報を使用する必要があります。
Where 句を解析し、式内の別の列を識別することができます
しかし、それらを参照しないでください
DFClause=Currentdatafilter << get where clause();<BR />SelectInnerExpr=Arg(parse(DFClause),1);<BR />// let assume for a second this will always return an expression of this type to simplify the example <BR />SelectInnerExpr= expr(:study_owner == "name" & :Is Electr. == 1);<BR /><BR />//so i can parse it with a simple for loop
for(iA=1,iA<=NArg(SelectInnerExpr),iA++,
TestColExp=Arg(Arg(SelectInnerExpr,iA),1); // here i can get the column as i need but as :ColumName
TestCol=eval(TestColExp); // so this does not really retun the column reference<BR /> colname= TestCol<< Get Name;
);
ただし、列を :ColumName として取得します
列参照を取得してスクリプトを続行するにはどうすればよいですか?
colname= TestCol << 名前を取得
ウィンドウズRe: 解析から抽出された列を参照する Datafilter select whereこれはあなたが探しているものですか? For() ループを変更して、最初のビットを char に入れ、最初の単語を取り出して解析しました。 完全なスクリプトが添付されています。 他の人が追加する可能性のある、これを行うためのよりエレガントな方法もある可能性があります。
For( iA = 1, iA <= N Arg( SelectInnerExpr ), iA++,
TestColExp = Char( Arg( Arg( SelectInnerExpr, iA ), 1 ) ); // put all into a char()
TestCol = Parse( Word( 1, TestColExp ) ); //now returns test col
);
Re: 解析データフィルターから抽出された列を参照するこれも機能しているように見えますが、列名に開き括弧があるというそれほど珍しくないケースでは失敗します。それが問題になる場合は、それをトラップする必要があります。
Names Default To Here( 1 );
dt = open("$Sample_Data\Car Physical Data.jmp");
gb = dt << Graph Builder(
Size( 526, 668 ),
Show Control Panel( 0 ),
Variables( X( :Turning Circle ), Y( :Horsepower ) ),
Elements( Points( X, Y, Legend( 5 ) ), Smoother( X, Y, Legend( 6 ) ) ),
Local Data Filter(
Show Histograms and Bars( 0 ),
Add Filter( columns( :Country, :Type ), Display( :Type, N Items( 5 ) ) ),
Add Filter( columns( :Weight ), Display( :Weight, Height( 20 ) ) )
)
);
<BR /><BR /><BR /><BR />//////////// processing here
ob = (report(gb) << parent)[outlinebox(1)];
lis = (ob << xpath( "//TabPageBox" )) << get title;
colnames = Transform Each( {v, i}, lis[2 :: (N Items( lis ) - 1)],
Trim Whitespace( Items( [1 1], v, "(" )[1] )
);