解析包含逗号的连接字符串大家好,
我有一个包含多列的数据表,我想将其中一些添加到一起。 作为脚本的一部分,我选择一些列,将列名称存储在列表中,然后希望使用“求和”功能添加所选列。
为了做到这一点,我需要构建一个字符串“:DATA1,:DATA2,:DATA3”并将其解析在一列中。
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
我正在使用的代码片段如下:
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
list = {"DATA1", "DATA2", "DATA3"};
For( i = 1, i <= N Items( list ), i++,
If(
i == 1, string = ":" || Char( Eval( list[Eval( i )] ) ),
i > 1, string = string || "," || ":" || Char( Eval( list[Eval( i )] ) )
)
);
Parse( string );
执行时,我收到以下错误:
意想不到的“,”。 可能少了一个“;”或者 ”,”。
第 1 行第 7 列::DATA1►,:DATA2,:DATA3
其余被忽略的文本是
,:数据2,:数据3
:数据1
我有什么遗漏的吗?
提前致谢!
大规模定制回复:解析带有逗号的连接字符串感谢您的帮助和解释! 脚本中的“另一个数据”列正是我想要的。 “另一个数据”列似乎返回一个空单元格,并显示错误“需要参数为标量、矩阵或列表......”。 我会尝试找出为什么会发生这种情况。
回复:解析带有逗号的连接字符串查看它返回的字符串。
“:数据1,:数据2,:数据3”
尝试在不带引号的情况下运行,您会得到相同的结果。
如果您将列名称作为字符串,则可以执行类似的操作。
Names default to here(1);
dt = New Table( "Example",
Add Rows( 1 ),
New Column( "Data1", Set Values( [1] )),
New Column( "Data2", Set Values( [2] )),
New Column( "Data3", Set Values( [3] )),
);
// list of column names as strings
list = dt << Get Column Names("string"); // {"Data1", "Data2", "Data3"}
SumExpr = Expr(Sum());
for(i=1, i<=nitems(list), i++,
insert into(SumExpr, Column(dt, list[i]));
);
// see what the sumExpr looks like
show(nameexpr(sumExpr));
// then you have to do some substitute in order to actually get it to run
just_for_show = EvalExpr(
dt << New Column("Another Data", Formula(Expr(nameexpr(SumExpr))));
);
show(nameexpr(just_for_show));
just_for_show();// this will actually run the expression you just created.
// or you could use the list in Sum Directly.
// list of column names as references
list = dt << Get Column Names();
list=list[1::3];
// can do a list directly in Sum()
// should still substitute it in so it's no dependant on then list variable
just_for_show =Substitute(
Expr(
dt << new Column("Yet Another Data", Formula(Sum(DV_LIST)))
),
Expr(DV_LIST), list
);
show(nameexpr(just_for_show));
just_for_show(); // actually evaluates again.