<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 << 新列(计数["abc"][1]、数值、连续、公式( If(Expr(Cols["A1"][1]) + Expr(Cols["A1"][2]) + Expr(列["A1"][3]) > 0,1,0)));
dt << 新列(计数["abc"][2]、数值、连续、公式( If(Expr(Cols["A2"][1]) + Expr(Cols["A2"][2]) + Expr(列["A2"][3]) > 0,1,0)));
);
Eval(Eval Expr( newColExpr));
对于我的问题有任何建议,我将不胜感激。
谢谢!
您可以使用一些符号,它们通常可以帮助动态 jsl 更具可读性:
如果您需要在字符串中包含引号,请不要使用变得乏味的 \!" 表示法,而是以 "\[ ... 开始字符串,然后所有后续转义字符都不需要 \!"符号 - 用 ]" 结束字符串
例如:
str =“\[“你好世界”]\”;
显示(str);
显示(解析(str))
其次,如果您要使用变量动态构建 jsl 命令,则可以使用 EvalInsert 函数,该函数允许您使用符号 ^my_variable^ 插入变量。这避免了使用 SubstituteInto 的需要。
结合这两种方法,您可以使用以下模式包装动态代码:
评估(解析(评估插入(“\[
此处的 jsl 语句使用 ^var^ 表示法进行替换
]\")));
例如:
清除全局变量();
//制作示例表
dt = 新表(“测试”,
添加行( 3 ),
新列( "A", 数字, 连续, 格式( "最佳", 1 ), 设置值( [0, 1, 1] ) ),
新列( "B", 数字, 连续, 格式( "最佳", 12 ), 设置值( [0, 2, 2] ) ),
新列(“C”,数字,连续,格式(“最佳”,12),设置值([0,3,3]))
);
//定义条件数组
列=关联数组();
列["A1"] = {"A", "B", "C"};
Cols["abc"] = {"总计 1", "总计 2"};
//迭代生成子串
评估(解析(评估插入(“\[
s1 = 列["A1"][1];
]\")));
For( i = 2, i <= N Items( Cols["A1"] ), i++,
评估(解析(评估插入(“\[
s1 = s1 || “+”||列["A1"][^i^]
]\")));
);
评估(解析(评估插入(“\[
newcol_s1 = dt << 新列( Cols["abc"][1],
数字、连续、
公式( If (^s1^ > 0, 1, 0 ) )
]\")));
从字符串动态构建表达式的一种方法。 与表达式相比,我认为字符串更容易操作。
这里有一个例子。 它“必须”是一种更简单的方法,但它确实有效。
清除全局变量() ;
//制作示例表
dt =新表( “测试” ,
添加行( 3 ) ,
新专栏( “A” ,数字,连续的,格式( “最好的” , 1 ) ,设定值( [ 0 , 1 , 1 ] ) ) ,
新专栏( “乙” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 0 , 2 , 2 ] ) ) ,
新专栏( “C” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 0 , 3 , 3 ] ) ) ,
新专栏( “D” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 4 , 0 , 4 ] ) ) ,
新专栏( “E” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 5 , 0 , 5 ] ) ) ,
新专栏( “F” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 6 , 0 , 6 ] ) )
) ;
//定义条件数组
科尔斯=关联数组() ;
科尔斯[ “A1” ] = { A ,乙, C } ;
科尔斯[ “A2” ] = { D ,乙, F } ;
科尔斯[ “abc” ] = { “总计1” , “总计2” } ;
//迭代生成子串
s1 = "Expr(列[\!"A1\!"][1])" ;
为了(我= 2 ,我<= N 项(科尔斯[ “A1” ] ) ,我++,
s1 = s1 || “+” ||代替( "Expr(列[\!"A1\!"][_i_])" ,表达式( _我_ ) ,查尔(评估(我) ) )
) ;
s2 = "Expr(列[\!"A2\!"][1])" ;
为了(我= 2 ,我<= N 项(科尔斯[ “A2” ] ) ,我++,
s2 = s2 || “+” ||代替( "Expr(列[\!"A2\!"][_i_])" ,表达式( _我_ ) ,查尔(评估(我) ) )
) ;
// 表示表达式的字符串,用 _s_ 替换子字符串
新col_s1 = "dt << 新列( Cols[\!"abc\!"][1], 数值、连续、公式( If( _s_ > 0, 1, 0 ) ) )" ;
代入(新col_s1 ,表达式( _s_ ) , s1 ) ;
新col_s2 = "dt << 新列( Cols[\!"abc\!"][2]、数值、连续、公式( If( _s_ > 0, 1, 0 ) ) )" ;
代入(新col_s2 ,表达式( _s_ ) , s2 ) ;
//解析完整的字符串
e1 =解析(新col_s1 ) ;
e2 =解析(新col_s2 ) ;
//通过评估子字符串 expr 然后评估完整的表达式来创建新列。
评估(求值表达式( e1 ) ) ;
评估(求值表达式( e2 ) ) ;