動的列の式<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />いくつかの列を追加して新しい列を生成しています。 追加する列は、ファイルから名前を取得し、配列リストとして名前を構築します。 列名と列数は変更される可能性があります。 列の数が変更されると、その変更を反映するために数式を編集する必要があります。 列名の配列リストを使用して、追加したいすべての列を指定することなく、数式に動的に追加する方法はありますか?
dt=現在のデータテーブル();
Cols=連想配列();
Cols["A1"]={ColA, ColB, ColC};
Cols["A2"]={ColE, ColF, ColG};
Cols["abc"]={"合計1", 合計2};
newcolExpr = Expr (
dt << 新しい列(Counts["abc"][1]、数値、連続、式(If(Expr(Cols["A1"][1]) + Expr(Cols["A1"][2]) + Expr(Cols["A1"][3]) > 0,1,0)));
dt << 新しい列(Counts["abc"][2]、数値、連続、Formula( If(Expr(Cols["A2"][1]) + Expr(Cols["A2"][2]) + Expr(Cols["A2"][3]) > 0,1,0)));
);
Eval(Eval Expr( newColExpr));
私の問題に対する提案をいただければ幸いです。
ありがとう!
Re: 動的列の式動的 JSL を読みやすくするために使用できる表記法がいくつかあります。
文字列に引用符を含める必要がある場合は、面倒になる \!" 表記を使用する代わりに、文字列を "\[ ... で開始すると、後続のすべてのエスケープ文字に \! が必要なくなります。表記 - 文字列を ]" で終了します。
例えば:
str = "\[ "Hello World" ]\";
表示(文字列);
show(解析(str))
次に、変数を使用して動的に jsl コマンドを作成している場合は、^my_variable^ という表記を使用して変数を挿入できる EvalInsert 関数を使用できます。これにより、SubstituteInto を使用する必要がなくなります。
2 つの方法を組み合わせると、次のパターンを使用して動的コードをラップできます。
Eval(Parse(EvalInsert("\[
jsl-statements ここでは置換に ^var^ 表記を使用しています
]\")));
例えば:
Globals() をクリアします。
//サンプルテーブルを作成する
dt = 新しいテーブル( "テスト",
行を追加( 3 )、
新しい列( "A"、数値、連続、形式( "Best", 1 )、値の設定( [0, 1, 1] ) )、
新しい列( "B"、数値、連続、形式( "Best", 12 )、設定値( [0, 2, 2] ) )、
新しい列( "C"、数値、連続、形式( "Best"、12 )、値の設定( [0, 3, 3] ) )
);
// 基準配列を定義する
Cols = 連想配列();
Cols["A1"] = {"A", "B", "C"};
Cols["abc"] = {"合計 1", "合計 2"};
//部分文字列を繰り返し作成します
Eval(Parse(EvalInsert("\[
s1 = Cols["A1"][1];
]\")));
For( i = 2, i <= N Items( Cols["A1"] )、i++、
Eval(Parse(EvalInsert("\[
s1 = s1 || "+" || Cols["A1"][^i^]
]\")));
);
Eval(Parse(EvalInsert("\[
newcol_s1 = dt << 新しい列( Cols["abc"][1],
数値、連続、
Formula( If (^s1^ > 0, 1, 0 ) )
]\")));
Re: 動的列の式こんにちは、MSさん
詳細な例をありがとうございます。 文字列には多くの操作が関係しますが、これより簡単な方法は他にありません。
Re: 動的列の式文字列から式を動的に構築する方法の 1 つ。 式と比較すると、文字列の方が扱いやすいと思います。
ここに例を示します。 それはより単純な方法である必要がありますが、機能します。
グローバルをクリアする() ;
//サンプルテーブルを作成する
dt =新しいテーブル( "テスト" 、
行の追加( 3 ) 、
新しい列( 「あ」 、数値、継続的、フォーマット( "一番" 、 1 ) 、設定値( [ 0 、 1 、 1 ] ) ) 、
新しい列( 「B」 、数値、継続的、フォーマット( "一番" 、 12 ) 、設定値( [ 0 、 2 、 2 】 ) ) 、
新しい列( 「C」 、数値、継続的、フォーマット( "一番" 、 12 ) 、設定値( [ 0 、 3 、 3 】 ) ) 、
新しい列( 「D」 、数値、継続的、フォーマット( "一番" 、 12 ) 、設定値( [ 4 、 0 、 4 ] ) ) 、
新しい列( 「え」 、数値、継続的、フォーマット( "一番" 、 12 ) 、設定値( [ 5 、 0 、 5 ] ) ) 、
新しい列( 「ふ」 、数値、継続的、フォーマット( "一番" 、 12 ) 、設定値( [ 6 、 0 、 6 ] ) )
) ;
// 基準配列を定義する
コル=連想配列() ;
コル[ 「A1」 】 = {あ、 B 、 C } ;
コル[ 「A2」 】 = { D 、 E 、 F } ;
コル[ 「ABC」 】 = { 「合計1」 、 「トータル2」 } ;
//部分文字列を繰り返し作成します
s1 = "Expr(Cols[\!"A1\!"][1])" ;
ために(私= 2 、私<= N 個のアイテム(コル[ 「A1」 】 ) 、私++、
s1 = s1 || 「+」 ||代わりの( "Expr(Cols[\!"A1\!"][_i_])" 、エクスプレッション( _私_ ) 、シャア(評価(私) ) )
) ;
s2 = "Expr(Cols[\!"A2\!"][1])" ;
ために(私= 2 、私<= N 個のアイテム(コル[ 「A2」 】 ) 、私++、
s2 = s2 || 「+」 ||代わりの( "Expr(Cols[\!"A2\!"][_i_])" 、エクスプレッション( _私_ ) 、シャア(評価(私) ) )
) ;
// 式を表す文字列。部分文字列を _s_ に置き換えます。
newcol_s1 = "dt << New Column( Cols[\!"abc\!"][1], Numeric, Continuous, Formula( If( _s_ > 0, 1, 0 ) ) )" ;
に代入( newcol_s1 、エクスプレッション( _s_ ) 、 s1 ) ;
newcol_s2 = "dt << New Column( Cols[\!"abc\!"][2], Numeric, Continuous, Formula( If( _s_ > 0, 1, 0 ) ) )" ;
に代入( newcol_s2 、エクスプレッション( _s_ ) 、 s2 ) ;
//完全な文字列を解析する
e1 =解析する( newcol_s1 ) ;
e2 =解析する( newcol_s2 ) ;
//部分文字列 expr を評価してから完全な式を評価して、新しい列を作成します。
評価(評価式( e1 ) ) ;
評価(評価式( e2 ) ) ;