51Testing软件测试论坛

标题: TCL几条命令小结 [打印本页]

作者: giftboys    时间: 2011-5-26 11:21
标题: TCL几条命令小结
Set
1.对变量进行赋值操作
2.变量的值已经发生改变
Append
1.增加字符串 跟在append后面的变量不能使用变量置换符号
如只能使用:
append txt “sldfkjlsjfl”或append txt skjdflksjdflsjkdf
不能使用:
Append $txt “sldfkjlsjfl”
2.变量的值已经发生改变

Incr
1.增加整型变量 跟在incr后面的变量不能使用变量置换符号
如只能使用:
incr  int +3
不能使用:
Incr  $ int +3
2.使用incr时后面跟的是正负数而不是加减法
3.变量的值已经发生改变
expr
把此命令放在这个位置应该不对
1.因为expr操作的是表达式,因些此处使用的变量一定要使用$(变量转换符)来进行使用
2.注意使用后变量本身的值没有改变

总结
        因此在使用变量的时候比如说for语句,或需要变量自增的时候建议使用“incr var +-setp“或”set var [expr var+setp]”
        凡是使用了$变量转换符的都不会改变其值,除非在使用set变量.
        有点像高级语言中的引用和值调用
        包换之后使用的lreplace命令如下面的例子:
        Set lista {2 3 4 5 6 7 8 9 9 10}
        Set j 2
        if {[lindex $lista $j]<[lindex $lista [expr $j+1]]} {   
                set temp [lindex $lista $j]                             
                lreplace $lista $j $j [lindex $lista [expr $j+1]]
                lreplace $lista [expr $j+1] [expr $j+1] $temp                
        }            
        puts "after arrary $lista"


        实现方法如下:
set lista {2 3 4 5 6 7 8 9 9 10}
        set j 2
        if {[lindex $lista $j]<[lindex $lista [expr $j+1]]} {   
                set temp [lindex $lista $j]                             
                set lista [lreplace $lista $j $j [lindex $lista [expr $j+1]] ]
                set lista [lreplace $lista [expr $j+1] [expr $j+1] $temp                 ]
        }            
        puts "after arrary $lista"
附上使用list和数组实现冒泡算法的例子
proc bubble { lista } {
       
        set temp {}
        for { set i 0 } { $i<9 } { incr i +1 } {
                for {set j 0} { $j<[expr 9-$i] } { incr j +1 } {
                        if {[lindex $lista $j]<[lindex $lista [expr $j+1]]} {
                                set temp [lindex $lista $j]
                                set lista [lreplace $lista $j $j [lindex $lista [expr $j+1]]]
                                set lista [lreplace $lista [expr $j+1] [expr $j+1] $temp]                                
                        }
                }
        }
        puts $lista
}

set lista {10 2 3 4 5 1 7 8 9 0}
bubble $lista

使用数组法:

proc mapao { lista } {
       
        set length [llength $lista]
        for { set temp 0 } { $temp<$length } { incr temp +1 } {
                set arrey($temp) [lindex $lista $temp]
        }
        puts "the array"
        puts $arrey
       
               set arreytemp 0
               for { set i 0 } { $i<[expr $length-1] } {incr i +1} {
                       for { set j 0 } { $j<[expr [expr $length-1]-$i] } {incr j +1} {
                               if {$arrey($j)<$arrey([expr $j+1])} {
                                       set arreytemp $arrey($j)
                                       set arrey($j) $arrey([expr $j+1])
                                       set arrey([expr $j+1]) $arreytemp
                               }
                       }
               }
               for { set temp 0 } { $temp<$length} { incr temp +1 } {
                       append listb $arrey($temp) { }
               }
              
               puts $listb
}      

set lista {1 2 3 4 5 6 19 3 6 7 8 9}
mapao $lista




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2