<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 ] ) ) ,
新專欄( “B” ,數字,連續的,格式( “最好的” , 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 ) ) ;