TCL-如何在tcl过程中将字符串解释为多个参数?

Har*_*ael 2 string split function tcl procedures

我有一个程序需要接受一定数量的参数来制作数组.我有一个csv文件,其中包含每行参数的信息.使用命令[split $ line,]返回包含空格的信息,除了程序将其视为一个参数而不是7或8个参数.如何获得csv行,如下所示:

 day-month-year,34,3,12,5,1,54,21,$big money
Run Code Online (Sandbox Code Playgroud)

被视为多个参数,例如:

 date num1 num2 num3 num4 num5 num6 num7 money
Run Code Online (Sandbox Code Playgroud)

或以下变化:

 day month year num1 ... num7 big money
Run Code Online (Sandbox Code Playgroud)

split命令返回:

 date num1 num2 num3 num4 num5 num6 num7 {big money}
Run Code Online (Sandbox Code Playgroud)

这是好的,除了它被视为一个参数.我的电话看起来像这样:

 procName [split $line ,]
Run Code Online (Sandbox Code Playgroud)

谢谢.

Hai*_* Vu 5

如果您使用的是Tcl 8.5或更高版本:

procName {*}[split $line ,]
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Tcl版本8.4,那么{*}构造尚未存在,您别无选择,只能执行以下操作:

eval procName [split $line ,]
Run Code Online (Sandbox Code Playgroud)

请注意,评估可能不安全,特别是如果输入来自未知来源.

更新

{*}构造称为Argument Expansion.我所知道的就是:

procName {*}{a b c}
Run Code Online (Sandbox Code Playgroud)

是相同的:

procName a b c
Run Code Online (Sandbox Code Playgroud)

此功能在Tcl改进提案(TIP)293中提出,并在Tcl'er Wiki中进行了讨论.