请求编写TCL代码:按第二列排序TXT文件中的字典数据
TCL实现按第二列数值排序文本数据
假设文本格式
先明确你的data.txt每行是TCL列表格式,示例内容如下:
{apple 25 red} {banana 12 yellow} {cherry 30 darkred} {date 18 brown}
完整可运行代码
# 读取目标文件 set fp [open "data.txt" r] set content [read $fp] close $fp # 拆分内容为行列表,过滤空行 set lines [split $content "\n"] set valid_lines [list] foreach line $lines { set trimmed_line [string trim $line] if {$trimmed_line ne ""} { lappend valid_lines $trimmed_line } } # 自定义排序比较函数:按每行第二列数值升序 proc compare_second_col {line_a line_b} { # 将行内容转为TCL列表,提取第二列数值 set val_a [lindex $line_a 1] set val_b [lindex $line_b 1] # 数值比较:返回负数/0/正数对应升序规则 return [expr {$val_a - $val_b}] } # 执行排序 set sorted_lines [lsort -command compare_second_col $valid_lines] # 打印结果到控制台 puts "排序后结果:" foreach line $sorted_lines { puts $line } # 可选:将排序结果写入新文件 set out_fp [open "sorted_data.txt" w] puts $out_fp [join $sorted_lines "\n"] close $out_fp
关键说明
- 空行处理:过滤空行避免排序时出现无效数据
- 自定义排序:通过
lsort -command指定比较函数,核心是提取每行的第二个元素(索引为1)进行数值比较 - 数值类型兼容:不管第二列是整数还是浮点数,
expr {$val_a - $val_b}都能正确处理升序排序 - 文件写入:最后一段代码可选,用于将排序结果保存到新文件
sorted_data.txt
内容的提问来源于stack exchange,提问作者Alex AJF
相关产品推荐
相关产品推荐

