### 取得陣列大小,如 Array1 的大小為 (3,5)
### 傳入 GetArraySize Array1 取得的值為 { 3 5 } 的 List
### 可由 [lindex [GetArraySize Array1] 0] 的方式取出 Row
### [lindex [GetArraySize Array1] 1] 的方式取出 Col
proc GetArraySize {arryName} {
set listName ""
upvar $arryName arryNameII
set arrRowMax 0
set arrColMax 0
foreach {value} [array get arryNameII] {lappend arrElment $value}
for {set i 1} {$i = [llength $arrElment]} {set i [expr $i+2]} {
set arrIdx [lindex $arrElment [expr $i-1]]
set arrRow [string range $arrIdx 0 [expr [string first "," $arrIdx 0] - 1] ]
set arrCol [string range $arrIdx [expr [string first "," $arrIdx 0] + 1] [string length $arrIdx]
]
if {$arrRow>$arrRowMax} {set arrRowMax $arrRow}
if {$arrCol>$arrColMax} {set arrColMax $arrCol}
}
return "$arrRowMax $arrColMax"
}
### 將陣列轉成List
### 因為用TCL的 array get 會連同 Array Index 同時轉成 List
### 所以另外寫一個 procedure ,將陣列內容轉成不含 Index 的 List
### 這一段才是主要的程轉換 Function
proc Array2List {srcArrName} {
upvar $srcArrName srcArrNameII
### 呼叫副程式取出陣列的 Row 及 Col 大小
set srcArrNameII_r [lindex [GetArraySize srcArrNameII] 0]
set srcArrNameII_c [lindex [GetArraySize srcArrNameII] 1]
set destListName ""
for {set i 1} {$i <= $srcArrNameII_r} {incr i } {
set temp ""
for {set j 1} {$j <= $srcArrNameII_c} {incr j } {
lappend temp 0
}
lappend destListName $temp
}
for {set i 1} {$i <= $srcArrNameII_r} {incr i } {
for {set j 1} {$j <= $srcArrNameII_c} {incr j } {
lset destListName [expr $i-1] [expr $j-1] [expr double ($srcArrNameII($i,$j))]
}
}
return $destListName
}
沒有留言:
張貼留言