使用TCL读取空格分隔5列文件并输出带前缀指定列的求助
TCL实现空格分隔文件指定列提取方案
原有代码问题说明
- 行长度判断错误:有效数据行实际有5个字段,判断
llength == 4会过滤掉所有有效行 - 多空格分隔处理错误:使用
split $line " "拆分多空格分隔的行会产生大量空列表元素,导致索引取值错位 - 未过滤无效行:没有跳过空行和开头带
#的注释表头行,容易产生异常输出
可直接运行的示例代码
# 读取命令行传入的第一个参数作为目标文件路径 set fp [open [lindex $argv 0] r] while {[gets $fp line] >= 0} { # 跳过空行和#开头的注释行 if {$line eq "" || [string match "#*" $line]} { continue } # 按任意空白字符拆分字段,自动过滤连续空格、首尾空格 set fields [split $line] # 仅处理符合5列格式的有效行 if {[llength $fields] != 5} { continue } # 按要求输出带前缀的指定列 puts "Add_obj [lindex $fields 0] [lindex $fields 2] [lindex $fields 3] [lindex $fields 4]" } close $fp
使用方法
将代码保存为extract_col.tcl,待处理文件命名为data.txt,执行以下命令即可得到预期输出:tclsh extract_col.tcl data.txt
内容的提问来源于stack exchange,提问作者Divesh Rastogi
相关产品推荐
相关产品推荐

