tcl - 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 - 但删除了空格。字符串映射只能替换一个单词但没有找到替换精确列的方法。
有人可以建议吗?
解决方案
假设列至少由 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