我有一个程序需要接受一定数量的参数来创建数组。我有一个 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 ,]
谢谢。
最佳答案
如果您使用的是 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 中进行了讨论.
关于string - TCL-如何在 tcl 程序中将字符串解释为多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467896/