【问题标题】:TCL, replacing strings in a textfileTCL,替换文本文件中的字符串
【发布时间】: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


    【解决方案1】:

    使用来自tcllibtextutil::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 也可以,将逗号留在字段末尾。
    • 我在想字段中可能会有额外的空格。
    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2011-06-30
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多