首页 > 解决方案 > Tcl:替换特定列中的字符串

问题描述

我有以下行:

      ^      1        0.02199   0.03188     0.03667     0.00136     0.04155     0.00000     1.07223  1.07223  -0.47462     0.00335      -0.46457     buf_63733/Z              DCKBD1BWP240H11P57PDULVT   -

我想用不同的值替换第 3 列,并用空格保持整行不变。

我尝试了 lreplace - 但删除了空格。字符串映射只能替换一个单词但没有找到替换精确列的方法。

有人可以建议吗?

标签: tcl

解决方案


假设列至少由 2 个空格分隔,您可以使用如下内容:

set indices [regexp -all -indices -inline {\S+(?:\s\S+)?\s{2,}} $line]
set colCount 1
set newValue 0.01234
foreach pair $indices {
    if {$colCount == 3} {
        lassign $pair start end
        set column [string range $line $start $end]
        set value [string trimright $column]
        set valueEnd [expr {$end-[string length $column]+[string length $value]}]
        set newLine [string replace $line $start $valueEnd $newValue]
    } elseif {$colCount > 3} {
        break
    }
    incr colCount
}

如果您不需要旧线路,您可以将其更改newValue为其他内容或newLine更改为。line


推荐阅读