【发布时间】:2016-01-27 10:11:17
【问题描述】:
假设我打开一个文件,然后将其解析为行。然后我使用一个循环:
foreach line $lines {}
例如,如果文件包含以下字符串:
XY 数据,名称 1我想把ACC_放在XYDATA之后得到ACC_NAME1
如果文件包含多个带有XYDATA的字符串,则输入VEL_、DSP_和Prs_等等
【问题讨论】:
标签: string file replace tcl text-files
假设我打开一个文件,然后将其解析为行。然后我使用一个循环:
foreach line $lines {}
例如,如果文件包含以下字符串:
XY 数据,名称 1我想把ACC_放在XYDATA之后得到ACC_NAME1
如果文件包含多个带有XYDATA的字符串,则输入VEL_、DSP_和Prs_等等
【问题讨论】:
标签: string file replace tcl text-files
使用来自tcllib 的textutil::split 包,以及foreach 同时迭代多个列表的能力
package require textutil::split
set line {XYDATA, foo, bar, baz, qux}
set prefixes {ACC_ VEL_ DSP_ Prs_}
set fields [textutil::split::splitx $line {, }]
set new [list]
if {[lindex $fields 0] eq "XYDATA"} {
lappend new [lindex $fields 0]
foreach prefix $prefixes field [lrange $fields 1 end] {
lappend new $prefix$field
}
}
puts [join $new ", "]
XYDATA, ACC_foo, VEL_bar, DSP_baz, Prs_qux
或者,使用生成一些代码的单个 regsub 调用
set code [regsub -all {(, )([^,]+)} $line {\1[lindex $prefixes [incr counter]]\2}]
set counter -1
puts [subst $code]
【讨论】:
split 也可以,将逗号留在字段末尾。