Download presentation
Presentation is loading. Please wait.
Published byEugene Parker Modified over 9 years ago
1
Dongsoo S. Kim dskim@iupui.edu
2
Tcl: Tool Command Language Interpreted programming (scripting) language Build on-the-fly commands and procedures Embeddable Platform-independent Tk: GUI toolkit and widgets based on Tcl Open source, cross-platform 2
3
Easy and fast programming Free Lots of online documentation, mostly free Resources http://www.tcl.tk Major applications use the Tcl as their interfaces: Ns2 Mentor Graphics 3
4
> tcl % puts "Hello. World!" Hello. World! % exit > 4 115.145.171.157
5
Start the Tcl program followed by a filename containing the script. > cat hello.tcl puts "Hello. World!" > tcl hello.tcl Hello. World! > 5
6
A script text file can be considered as a program if it is an executable file, and its first line contains a full path name of the tcl program following “#!” > ls -l -rwxr-xr-x 1 user group 42 Jul 3 13:12 hello.tcl > which tcl /usr/local/bin/tcl > cat hello.tcl #!/usr/local/bin/tcl puts "Hello. World!" > hello.tcl Hello. World! > 6
7
Simple syntax command_name arg1 arg2 … Print to screen (puts) % puts –nonewline "Hello. " % puts "World!" Assignment (set) % set income 32000 % puts "The income is $income" Use '$' to get the value of a variable (R-value) 7
8
A line started with a pond sign(#) is ignored as comments until the end of the line A command can be followed by a comment in a line with by placing ;# Exception #! at the first line indicates the script program It is a Unix rule, but not a Tcl rule # the first script puts –nonewline "Hello. " ;# continuing puts "World!“ 8
9
A Tcl command is terminated by an invisible new line character, or A semicolon(;) can be used to explicitly terminate a command % puts "Hello. "; puts "World! " hello world 9
10
A command can be stretched to multiple lines by using backslashes (\) The backslash and a following new line character is ignored Note: There must not be any characters (even space characters) between the backslash and the new line character % puts -nonewline \ =>"Hello. World!" Hello. World!tcl> 10
11
Mathematical expression command (expr) Operators arithmetic (+, -, *, /, %) Bitwise (~, >, &, ^, |) Logical (!, &&, ||) Boolean (, =, ==, !=) String Boolean (eq, ne,, =) List containment (in, ni) Ternary (x?y:z) Math functions (log, sin, cos, …) 11 % set pi 3.141592 % set r 2 % expr 2*$pi*$r 12.566368 % expr sin($pi/3) 0.866025294853
12
A Tcl command in a Tcl command: [] 12 % set a 3.0 % set b $a+4 % puts $b 3.0+4 % set c [expr $a+4] % puts $c 7.0
13
if {cond} {commands} [ elseif {cond} {commands} …] [ else {commands} ] 13 set sel 3 if {$sel == 1} { puts "Selection $sel" } elseif {$sel == 2} { puts "Selection $sel" } else { puts "Invalid selection" }
14
while {cond} {commands} 14 set i 1 set sum 0 while {$i <= 10} { set sum [expr $sum+$i] incr i }
15
for {init} {term} {incr} {statements} 15 puts "Fahrenheit\tCelcius" for {set fahr 0} {$fahr < 100} {incr fahr} { set celc [expr 5*($fahr-32)/9] puts "$fahr\t\t$celc" } Fahrenheit Celcius 0 -18 1 -18 2 -17 …
16
Basic foreach set weekdays {Sun Mon Tue Wed Thu Fri Sat} foreach d $weekdays { puts $d } foreach Variations set Colors {red orange yellow green blue purple} foreach {a b c} $Colors { puts "$c--$b--$a“ } set Foods {apple orange banana lime berry grape} foreach f $Foods c $Colors { puts "a $f is usually $c" } foreach {a b} $Foods c $Colors { puts "$a & $b are foods. $c is a color." } 16
17
Called by value only Syntax proc name arg-list proc-body 17 proc mile2km dist { return [expr $dist*1.6] } puts "Miles \t KM" for {set d 1} {$d < 10} {incr d} { set km [mile2km $d] puts "$d\t $km" }
18
By default, all variables in a procedure are local. To access the variable outside of the scope, use the command “global”. 18 set a 5 set b 6 set c 7 proc var_scope { } { global a set a 3 set b 2 set ::c 1 } var_scope puts "The value for a b c is: $a $b $c"
19
An ordered collection of elements A string containing any number of elements separated by white spaces (space or tab characters). For example, Sun Mon Tue Wed Thu Fri Sat is a list with seven elements. To save a list to a variable 19 set my_list [list a b c] set my_list "a b c " set my_list {a b c}
20
concat – join multiple list into a single list join – concatenate list elements into a string lappend – append elements to an existing list lindex – return an indexed element from a list linsert – insert an element to an existing list list – create explicitly a list from values llength – return the number of elements in a list lrange – return a sub-list from a list lreplace – return a new list after replacing elements lsearch – return the index of a searching pattern lsort – sort the list split – return a list by splitting a string by a split-char. 20
21
21 set weekday [list “Mon” “Tue” “Wed” “Thu” “Fri”] set weekend {Sat Sun} set week [concat $weekday $weekend] puts $week Mon Tue Wed Thu Fri Sat Sun lindex $week 0 Mon lindex $week end Sun llength $weekday 5
22
22
23
set a [list [list x y z]] puts [lindex $a 0] puts [lindex [lindex $a 0] 1] puts [lindex [lindex $a 1] 0] (unexpected result) set a [list x [list [list y] [list z]]] => How to get to the z? set arg1 [list g [list f [list h [list i X]]] [list r Y] k] set arg2 [list g [list f [list h [list i Y]]] [list r b] L] set both [list $arg1 $arg2] puts $both 23
24
Associative arrays (string as index) set color(rose) red set color(sky) blue set color(medal) gold set color(leaves) green set color(blackboard) black puts [array exists color] (tests if an array with the name "color" exists) puts [array exists colour] puts [array names color] (returns a list of the index strings) foreach item [array names color] { puts "$item is $color($item)" } (iterating through array) set lstColor [array get color] (convert array to list) array set color $lstColor (convert list to array) 24
25
regsub set stmt "Fan is one of Shania’s fans" regsub –nocase "fan" $stmt "Kristy" newStmt ?switches? exp string subSpec ?varName? puts "$newStmt" regsub –nocase –all "fan" $stmt "Kristy" newStmt puts "$newStmt" regexp (returns 1 if the regular expression matches the string, else returns 0) puts [regexp –nocase "fan" $stmt] ?switches? regexp string format puts [format "%s is a %d-year-old" Fan 26] formatString ?arg arg...? 25
26
set statement " Fan is a student " set statement [string trim $statement] puts [string length $statement] puts [string length statement] puts [string index $statement 4] puts [string index $statement end] puts [string first "is" $statement] (string last) puts [string first $statement "is"] puts [string range $statement 4 end] puts [string replace $statement 9 end "professor"] puts [string match "*student" $statement] (* ? []) 26
27
set fRead [open source.txt r] set fWrite [open target.txt w] while {![eof $fRead]} { set strLine [gets $fRead] ;#or gets $fRead strLine regsub –nocase –all "fan" $strLine "kristy" strLine puts $fWrite $strLine } close $fRead close $fWrite ################ source.txt ################ Fan is a CSE student. Fan is also one of Shania’s fans. Kristy and Fan are classmates. 27
28
eval: execute a command dynamically built up in your program set Script { set Number1 17 set Number2 25 set Result [expr $Number1 + $Number2] } eval $Script exec: execute external programs clock trace info after 28
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.