TCL、regexp函数和参数替换
我有下面的代码,试图通过regexp函数将单行上的数据匹配到不同的变量中。 regexp函数中的数据数量(在输入行上)和变量名的数量可能会有所不同,这就是为什么我使用$varLine(以前在我的实际代码中处理过) 当我执行它时,我得到以下错误($sig0正确显示): 如果我手动将$varLine替换为regexp行,错误将消失:TCL、regexp函数和参数替换,regex,tcl,substitution,Regex,Tcl,Substitution,我有下面的代码,试图通过regexp函数将单行上的数据匹配到不同的变量中。 regexp函数中的数据数量(在输入行上)和变量名的数量可能会有所不同,这就是为什么我使用$varLine(以前在我的实际代码中处理过) 当我执行它时,我得到以下错误($sig0正确显示): 如果我手动将$varLine替换为regexp行,错误将消失: set in_stim "13 1 1 0 1 0 0 0 2 03" set regex {^(\d+)\s([01])\s([01])\s([01])\s([01]
set in_stim "13 1 1 0 1 0 0 0 2 03"
set regex {^(\d+)\s([01])\s([01])\s([01])\s([01])\s([01])\s([01])\s([01])\s(\d+)\s(\d+)}
regexp $regex $in_stim whole sig0 sig1 sig2 sig3 sig4 sig5 sig6 sig7 sig8 sig8
puts $sig0
puts $sig1
我得到以下正确的输出:
13
1
有没有人看到我的代码中有错误,或者可以帮忙?
谢谢 当你这样做的时候
set varLine "sig1 sig2 sig3 sig4 sig5 sig6 sig7 sig8 sig8"
regexp $regex $in_stim whole sig0 $varLine
Tcl解析器只传递regexp
命令五个参数,第五个参数是变量“varLine”的内容,然后regexp
命令将变量“varLine”作为一个单词处理。一个单词显然表示一个变量(在您的例子中,它的名称有些复杂)
要完成您需要的任务,您必须求助于动态脚本,这可以通过两种方式完成:
regexp $regex $in_stim whole sig0 {*}$varLine
{*}
thingy将$varLine的内容扩展到一个“就地”列表中-请参阅第5条规则
set varLine "sig1 sig2 sig3 sig4 sig5 sig6 sig7 sig8 sig8"
regexp $regex $in_stim whole sig0 $varLine
Tcl解析器只传递regexp
命令五个参数,第五个参数是变量“varLine”的内容,然后regexp
命令将变量“varLine”作为一个单词处理。一个单词显然表示一个变量(在您的例子中,它的名称有些复杂)
要完成您需要的任务,您必须求助于动态脚本,这可以通过两种方式完成:
regexp $regex $in_stim whole sig0 {*}$varLine
在新风格的方法中,使用
{*}
thingy将$varLine的内容扩展为一个“就地”列表-请参阅第5条规则。问题在于regexp
命令没有将存储子匹配的变量列表作为一个参数,而是将其作为多个参数
解决此问题的最简单方法是展开变量列表:
regexp $regex $in_stim whole sig0 {*}$varLine
问题是,
regexp
命令没有将存储子匹配的变量列表作为一个参数,而是作为多个参数
解决此问题的最简单方法是展开变量列表:
regexp $regex $in_stim whole sig0 {*}$varLine
问题解决了!谢谢kostix!我猜它必须处理
eval
指令,但我忘记了列表提示。我读了{*}但不明白,你的链接太完美了!问题解决了!谢谢kostix!我猜它必须处理eval
指令,但我忘记了列表提示。我读了{*}但不明白,你的链接太完美了!