【问题标题】:taking array and building stream expressions in tcl在 tcl 中获取数组并构建流表达式
【发布时间】:2014-12-11 00:49:47
【问题描述】:

我正在尝试从以下数组构建一个 STREAM 表达式。问题是,我想从数组值中复制特定的字符串,并将它们重复放置在整个字符串的另一个位置。这是我的代码,以及想要的结果。

期望的结果:STREAM::expression @$val-1@$val-2$val-1@@$val-3@$val-4$val-3@ 原始字符串:$val-2$val-1$val-4$val-3 基本上, val-1 代表一个短字符串,我想用附加的第二个字符串替换它。换句话说,另一种插入方式。

array set {
  key1 $val-2$val-1$val-4$val-3
}

我有放置@符号的代码,我只需要移动字符串。

【问题讨论】:

  • 我不确定我是否完全理解您的问题。 val-1 例如是字符串还是变量?如果它是一个字符串,我认为this single RE 可以同时执行@ 的移动和插入,应用为regsub -all {(\$val-\d+)(\$val-\d+)} $original_string {@\2@\1\2@} result_string

标签: arrays string stream tcl


【解决方案1】:

有两种方法可以对字符串值进行此处理(将其保存在数组中并不重要),即不带正则表达式和正则表达式。

没有 REs

set s {$val-2$val-1$val-4$val-3}
set substring [string range $s 6 12]
set s $substring$s

好的,有几种方法可以获取子字符串(例如,适当的split,然后是lindex,如下所示),但如果不知道详细信息,很难说它们会是什么。

set s {$val-2$val-1$val-4$val-3}
set bits [split $s {$}]
set substring \$[lindex $bits 2]
set s $substring$s

使用 REs

set s {$val-2$val-1$val-4$val-3}
regsub {^.*?(\$val-1)} $s {\1&} s

在这种情况下,您需要担心图案来选择您想要的作品。基本上与上述相同的问题,除了现在使用 RE。这可能会也可能不会让事情变得更容易……


以上所有解决方案都将以下内容完全存储在 s 变量中:

$val-1$val-2$val-1$val-4$val-3

【讨论】:

  • 谢谢。我认为选项 2 显示出很大的希望。拆分后有没有办法查看字符串的索引,例如 lindex $bits 2 包含“sometext”。每个字符串的项目数可能不同,是否有长度参数
  • @user1660886 嗯​​……也许吧?我不太明白这个问题。
猜你喜欢
  • 1970-01-01
  • 2022-06-27
  • 2022-01-09
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多