我在使用TCL排序时遇到问题,我无法将参考示例放入我的。
我的文件包含两列name
& area
,如何按区域排序而不更改相应的名称?
我正在试用foreach&关联数组但到目前为止我无法这样做...
LSDNENCLSSXl_HVT 2.2872
LSDNENCLSSX2_HVT 2.5414
LSDNENCLSSX4_HVT 3.0497
LSDNENCLSSX8_HVT 4.0663
LSDNENCLX1_HVT 7.116032
LSDNENCLX2_HVT 7.62432
LSDNENCLX4_HVT 8.640896
LSDNENCLX8_HVT 11.18233
LSDNENSSXl_HVT 4.320448
LSDNENSSX2_HVT 5.08288
LSDNENSSX4_HVT 5.591168
LSDNENSSX8_HVT 7.370176
LSDNENXl_HVT 7.116032
LSDNENX2_HVT 7.62432
LSDNENX4_HVT 8.640896
LSDNENX8_HVT 11.182336
LSDNSSXl_HVT 1.779008
LSDNSSX2_HVT 2.033152
LSDNSSX4_HVT 2.54144
LSDNSSX8_HVT 4.320448
LSDNXl_HVT 7.116032
LSDNX2_HVT 7.116032
LSDNX4_HVT 7.116032
LSDNX8_HVT 9.149184
任何帮助将不胜感激......
答案 0 :(得分:0)
set fh [open "filename"]
set data [read $fh]
close $fh
set words [regexp -all -inline {\S+} $data]
foreach {name area} [lsort -stride 2 -index 1 -real $words] {
puts "$name\t$area"
}
请参阅lsort
文档。
输出
LSDNSSXl_HVT 1.779008
LSDNSSX2_HVT 2.033152
LSDNENCLSSXl_HVT 2.2872
LSDNENCLSSX2_HVT 2.5414
LSDNSSX4_HVT 2.54144
LSDNENCLSSX4_HVT 3.0497
LSDNENCLSSX8_HVT 4.0663
LSDNENSSXl_HVT 4.320448
LSDNSSX8_HVT 4.320448
LSDNENSSX2_HVT 5.08288
LSDNENSSX4_HVT 5.591168
LSDNENCLX1_HVT 7.116032
LSDNENXl_HVT 7.116032
LSDNXl_HVT 7.116032
LSDNX2_HVT 7.116032
LSDNX4_HVT 7.116032
LSDNENSSX8_HVT 7.370176
LSDNENCLX2_HVT 7.62432
LSDNENX2_HVT 7.62432
LSDNENCLX4_HVT 8.640896
LSDNENX4_HVT 8.640896
LSDNX8_HVT 9.149184
LSDNENCLX8_HVT 11.18233
LSDNENX8_HVT 11.182336
答案 1 :(得分:0)
-stride
是Tcl 8.6中添加的一项功能,所以我猜您使用的是Tcl 8.5或更早版本。
此外,评论中的代码看起来并不合适。有几件事看起来不对劲。你需要将一个列表传递给array set
以获得一个数组,并且数组没有排序,所以我会放弃它。我会建议这样的事情:
set fh [open "result_table_sort" r]
set data [read $fh]
close $fh
set lines [split $data "\n"] ;# Use the appropriate EOL character
# if it's different
set result [lsort -real -index 1 $lines]
puts $result
以上假设文件result_table_sort
结构合理,并且不包含任何未按照提供的示例中所述格式化/结构化的内容。