2015-06-17 41 views
0

我是一個普通的matlab用戶,需要在TCL中進行一些處理。我沒有使用tcl的經驗,所以到目前爲止我所做的就是在谷歌上搜索。如何在使用TCL的列中找到對應的值

請原諒新手的方式...

我在列A和B是通過文件_1導入的數據,我想獲得B列的相應值在列A例如兩個數字

當A是0.1,則B是9,並且當A是0.3,則B是21,存儲器9 & 21在可變供以後使用

我想打開另一個文件數據_2,其具有兩個C列和D.

我想列C列中列9和列21(正數)之間的列D的所有數字,並將其平均並放入一個變量供以後使用。

我已經開始嘗試爲0.1和0.3找到對應的值,這就是我卡住的地方。

我可以(我認爲)發現0.1和0.3,但不知道如何從B列

得到相應的值

然後用第二部分繼續前進。

請幫忙。

 Data_1       Data__2 
Column A Column B  Column C Column D 
0   0    180   14.5 
0.01  1.5    162   13.05 
0.02  3    144   11.6 
0.03  4.5    126   10.15 
0.04  6    108   8.7 
0.05  7.5    90   7.25 
0.1   9    72   5.8 
0.125  10.5   54   4.35 
0.15  12    20   2.9 
0.175  13.5   10   1.45 
0.2   15    0   0 
0.225  16.5   -10   -1.45 
0.25  18    -20   -2.9 
0.275  19.5   -54   -4.35 
0.3   21    -72   -5.8 
0.325  22.5   -90   -7.25 
0.35  24    -108  -8.7 
0.0.375  25.5   -126  -10.15 
0.4   27    -144  -11.6 
0.425  28.5   -162  -13.05 
0.45  30    -180  -14.5 
# Open files for reading 
set input1 [open "Data_1.dat" r] 
set input2 [open "Data_2.dat" r] 

#read file 
set file_data [read $input1] 
#close file 
close $input1 

#split into lines 
set data [split $file_data "\n"] 
foreach line $data { 

set val1 [lsearch -inline $line 0.1] 
set val2 [lsearch -inline $line 0.3] 

puts $val1 
puts $val2 
} 
+0

開始學習的Tcl是[Tcl的教程]的最佳位置的值(http://www.tcl.tk/man/tcltutorial/html/tcltutorial.html) –

回答

0

我會這樣寫:

set min_key 0.1 
set max_key 0.3 

set fid [open Data_1.dat r] 
while {[gets $fid line] != -1} { 
    lassign $line a b 
    if {$a == $min_key} { 
     set min $b 
    } 
    if {$a == $max_key} { 
     set max $b 
    } 
} 
close $fid 

set fid [open Data_2.dat r] 
while {[gets $fid line] != -1} { 
    lassign $line c d 
    if {$min <= $d && $d <= $max} { 
     lappend values $c 
    } 
} 
close $fid 

puts [join $values \n] 

此輸出

180 
162 
144 
126 

注:

  • 使用while循環遍歷文件的行。
  • lassign分配列表變量
+0

謝謝格倫,你的榜樣完全按照我的意願去做。 – Anju

0

我不太明白,所有的if/else邏輯的在您的文章,但有幾個方式可以處理文件。在您的示例中,您可以將A和B列存儲爲兩個單獨的列表。

set acol [list] 
set bcol [list] 
set data [split $file_data "\n"] 
foreach line $data { 
    lappend acol [lindex $line 0] 
    lappend bcol [lindex $line 1] 
} 

# Find the first column A value that is 0.1. 
set index [lsearch -real $acol 0.1] 

# Get the corresponding B value. 
puts "b value: [lindex $bcol $index]" 

你或許也可以簡化foreach循環,而不用將文件數據拆分成行。

foreach {val1 val2} $file_data { 
    lappend acol $val1 
    lappend bcol $val2 
}