2008年6月4日 星期三

TCL中,將陣列(Array) 轉成不含Index 的 List 字串

### 取得陣列大小,如 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
}

2008年6月2日 星期一

VB DLL 和 TCL 的應用

'################# VB DLL Class 設定 ###########
'### 開啟 VB 的 DLL 專案,並且命名為 ReCallDLL
'### 新增一個 Class 檔案 ,命名為 clsReCallDLL
'###---------- 加入以下程式碼 -----------------

Public Function testAB(a() As Variant, b()As Variant) As String
    '組合第一個陣列內容
   testAB = "aryStr = " & a(0) & b(0)
End Function

Public Function mathadd(a As Double, b As Double) As Double
    '兩數相加
   mathadd = a + b
End Function

Public Function mathadd2(a As Variant) As String
    '傳回傳入字串
   mathadd2 = "The Value is = " & a
End Function
'###----------------------------------------

################# TCL 的執行 Scrip ###########
### TCL 載入 DLL

package require tcom
::tcom::import ReCallDLL.dll     ;#採用動態(未安裝 DLL)載入
### 若是靜態(事先安裝DLL)載入則用下面的方法
#set comUtil [::ReCallDLL::clsReCallDLL]
### 建立連接端

set comUtil [::tcom::ref createobject "ReCallDLL.clsReCallDLL"]

### TCL 執行 DLL
set b "1 2"    ;#將 b 設為 List ,因為設成陣列Array 傳遞時會出現錯誤
set c "3 4"    ;#將 c 設為 List ,因為設成陣列Array 傳遞時會出現錯誤
set a [$comUtil testAB b c]    ;#呼叫 DLL 並執行其中的一個 testAB Function
### 傳回 aryStr = 13
set b 12     ;#將 b 設為單一數字
set c 23    ;#將 c 設為單一數字
set a [$comUtil mathadd bl cl] ;#呼叫 DLL 並執行 mathadd 將兩數相加並傳回
## 傳回 35

2008年6月1日 星期日

nUtella 能多益榛子果仁可可醬

自從上回老弟去義大利帶回來
La buona prima colazione con nUtella
一吃到真是驚為天人,於是到處找看台灣有沒有在賣,
後來在網路上查到好市多和大潤發都有在賣,
所以昨天就去大潤發買了一瓶,
大潤發賣的是200克包裝,一瓶要72元
進口商是:香港商亞洲費列羅有限公司台灣分公司

今天就拿來比較看看,


外觀是有差別,因為義大利的是400克包裝(歐元2.56),台灣是200克包裝(台幣72元),
背面看來也有所不同,


以口感來說,台灣的味道比較淡,而且濃稠度也沒有義大利的濃,
台灣賣的榛果味也沒有義大利的香,
台灣進口的可可醬一開封還帶點淡淡的藥味,必須將蓋子打開幾分鐘才行,
那股藥味不知道是包裝的關係還是內容物的關係?

也因為台灣進口的能多益榛子果仁可可醬濃度比較稀,
在抹麵包或餅干時可以很容易的抹上,只是要抹很厚一層
而義大利的較濃,在抹時要稍微出點力否則不容易抹上去,
不過卻只要薄薄一層就有濃濃的金沙味了。

熱門文章