2013-01-16 66 views
0

以下TCL函數被調用n次。每次將numid和type傳遞給此函數時,我都試圖爲每種類型添加numid。將TCL數組或列表操作轉換爲變量

例如

如果傳遞的值如下

2  BLACK 
1  RED 
1  BLACK 
3  BLUE 
1  BLUE 
2  BLUE 
2  RED 

我得到的是以下使用set_numid_type功能輸出

black_color_str 2 1 
red_color_str 1 2 
blue_color_str 3 1 2 

但我需要的輸出如下。當type不在順序中時,它應該被附加到不同的變量類型。

black_color_str 2 
red_color_str 1 
black_color_str 1 
blue_color_str 3 1 2 (since BLUE color is called in sequence) 
red_color_str 2 



proc set_numid_type {numid type} { 

    variable black_color_str 
    variable red_color_str 
    variable blue_color_str 

    if {$type == "BLACK"} { 

     if {![info exists black_color_str] || ![llength $ black_color_str]} { 
      set black_color_str "" 
      } 

     lappend black_color_str $numid 
    } 

    if {$type == "RED"} { 

     if {![info exists red_color_str] || ![llength $ red_color_str]} { 
      set red_color_str "" 
     } 

     lappend red_color_str $numid 
    } 

    if {$type == "BLUE"} { 

     if {![info exists blue_color_str] || ![llength $ blue_color_str]} { 
      set blue_color_str "" 
      } 

     lappend blue_color_str $numid 
    } 

} 
+0

建議張貼調用代碼。這只是一個管理狀態的問題,即確定當前顏色是應該添加到序列中還是創建新行的最後一種顏色。 – Matthew

+0

調用代碼來自xslt端,如下所示: – tcluser

+0

tcluser

回答

0

以下是對輸入列表進行操作並返回輸出列表的版本。 如果你真的想要,你可以修改它以處理全局變量。

proc GroupSequences { inputPairs } { 
    if {[llength $inputPairs] == 0} return {}  
    set sequences {} 
    set lastColour "" 
    set latestSequence {} 
    foreach pair $inputPairs { 
     puts 1 
     if {"[lindex $pair 1]" != $lastColour} { 
      puts 2 
      if {[llength $latestSequence] > 0} { 
       puts 3 
       lappend sequences $latestSequence 
      } 
      puts 4 
      set latestSequence [lreverse $pair] 
      set lastColour [lindex $pair 1] 
     } else { 
      puts 5 
      lappend latestSequence [lindex $pair 0] 
     } 
    } 
    puts 6 
    lappend sequences $latestSequence 
    return $sequences 
} 

set input [list { 2 "black" } { 1 "red" } { 1 "black" } {3 "blue" } { 1 "blue" } { 2 "blue" } { 2 "red" } ] 
set seq [GroupSequences $input] 
+0

嗨Ergwun,感謝您抽出時間回答我的問題,但我特別尋找以我需要的輸出中描述的方式添加的變量。我只是希望將每個變量僅附加到numid。我試圖在編輯器中修復你的代碼,但是如果你可以用你要求的代碼更新你的代碼,那將會很棒。再次感謝。 – tcluser

+0

對不起,沒有。您已經發布的代碼顯示瞭如何附加到過程外的變量。如果有一個你不明白的*特定部分,那就問另一個問題。 – Ergwun