5

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

 day-month-year,34,3,12,5,1,54,21,$big money

被视为多个参数,例如:

 date num1 num2 num3 num4 num5 num6 num7 money

或如下变体:

 day month year num1 ... num7 big money

拆分命令返回:

 date num1 num2 num3 num4 num5 num6 num7 {big money}

这很好,只是它被视为单个参数。我的电话看起来像这样:

 procName [split $line ,]

谢谢你。

4

1 回答 1

8

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

procName {*}[split $line ,]

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

eval procName [split $line ,]

请注意,评估可能不安全,尤其是在输入来自未知来源的情况下。

更新

{*} 构造称为参数扩展。我所知道的是:

procName {*}{a b c}

是相同的:

procName a b c

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

于 2013-03-18T00:47:09.487 回答