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)
谢谢.
如果您使用的是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中进行了讨论.