用tcl中的单个变量替换几行命令

利亚姆

我知道我一直在问很多问题,但我仍在学习tcl,到目前为止,在任何地方都找不到与该问题类似的东西。例如,是否可以用一个变量替换tcl中的一组f命令function0

我希望能够替换以下代码;

set f [listFromFile $path1]
set f [lsort -unique $f]
set f [lsearch -all -inline $f "test_*"]
set f [regsub -all {,} $f "" ]
set len [llength $f]
set cnt 0

使用变量,function0因为同一代码在脚本中多次出现。我应该提一下,它同时出现procproc

上面的代码与类似的脚本有关

while {$cnt < $len} {
    puts [lindex $f $cnt]
    incr cnt
    after 25; #not needed, but for viewing purposes
}
彼得·勒维林

变量用于存储值。要隐藏(封装)某些代码行,您需要一个命令过程,该过程是使用proc命令定义的

您想隐藏以下几行

set f [listFromFile $path1]
set f [lsort -unique $f]
set f [lsearch -all -inline $f "test_*"]
set f [regsub -all {,} $f "" ]
set len [llength $f]
set cnt 0

从而能够仅调用function0 $path1并一次完成所有这些计算。此外,您想使用在如下代码中调用过程的结果:

while {$cnt < $len} {
    puts [lindex $f $cnt]
    # ...

你想要的方式function0来产生三种不同的价值观,在存储cntlenf有几种方法可以使命令过程返回多个值,但是这里最干净的解决方案是使它返回一个值。您要打印的列表。len可以使用单个命令从该列表中计算in的值,cnt最好在命令过程之外执行in的初始化您得到的是这样的:

proc function0 path {
    set f [listFromFile $path]
    set f [lsort -unique $f]
    set f [lsearch -all -inline $f test_*]
    set f [regsub -all , $f {}]
    return $f
}

您可以这样使用:

set f [function0 $path1]
set len [llength $f]
set cnt 0
while {$cnt < $len} {
    puts [lindex $f $cnt]
    incr cnt
    after 25; #not needed, but for viewing purposes
}

或像这样:

set f [function0 $path1]
set len [llength $f]
for {set cnt 0} {$cnt < $len} {incr cnt} {
    puts [lindex $f $cnt]
    after 25; #not needed, but for viewing purposes
}

或像这样:

set f [function0 $path1]
foreach item $f {
    puts $item
    after 25; #not needed, but for viewing purposes
}

这就是为什么我不费心创建一个返回三个值的过程的原因:您只需要一个值。


glenn jackman在关于的使用的另一个答案中提出了一个非常好的观点(实际上是两点)regsub为了完整起见,我将在这里重复。

Tcl有点令人困惑,因为它通常允许对不是正式字符串的数据结构进行字符串操作(如字符串替换)。这使该语言非常强大且富有表现力,但也意味着新手并不总是能像普通类型系统那样给他们带来好处。

在这种情况下,您可以listFromFile通过从文件中读取字符串然后split在其上使用来内部创建列表结构从这一点开始,它就是一个列表,您应该只对其执行列表操作。如果你想拿出你的数据的所有逗号你要么应该在列表中的每个项目执行该操作,否则执行操作中listFromFile分裂的文本。

列表上的字符串操作可以工作,但有时结果会出现乱码,因此应避免将它们混合使用。另一个好处是,在这种情况下,它比更为string map可取regsub,否则,它会使代码更加清晰。

文档:forforeachlindexllengthlsearchlsortprocputsregsubsetsplitstring

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用tcl中的单个变量替换几行命令

来自分类Dev

tcl中的变量替换

来自分类Dev

$:: 中的 Tcl 变量替换

来自分类Dev

用变量替换命令?

来自分类Dev

Tcl列表中的变量替换

来自分类Dev

用sed替换几行

来自分类Dev

命令中的Shell变量替换

来自分类Dev

bash 命令中的变量替换

来自分类Dev

用变量中的字符串命令替换bash命令的行为

来自分类Dev

用变量中的字符串命令替换bash命令的行为

来自分类Dev

用javascript中的单个反斜杠替换?

来自分类Dev

用javascript中的单个反斜杠替换?

来自分类Dev

在 Python 中的命令中替换变量

来自分类Dev

用另一个文件中的行替换文件中的几行

来自分类Dev

在命令替换中对变量进行报价处理

来自分类Dev

bash变量评估中的命令替换

来自分类Dev

AWK exec命令中的TCL全局变量

来自分类Dev

AWK exec命令中的TCL全局变量

来自分类Dev

用Java中的数据替换变量

来自分类Dev

用JQuery中的变量替换Span

来自分类Dev

用元素组合替换列表中的变量

来自分类Dev

可以将命令替换嵌套在变量替换中吗?

来自分类Dev

用tcl执行shell命令

来自分类Dev

替换PL / SQL中的几行regexp函数

来自分类Dev

Tcl中的interp命令

来自分类Dev

如何用单个变量替换列表中的所有元素

来自分类Dev

如何在Swift中替换多元素NSArray的单个变量

来自分类Dev

用变量在EXEC命令中查询

来自分类Dev

用单个空格替换字符串中的多个空格