UG后处理tcl语言解释Word文档下载推荐.docx
- 文档编号:6334326
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:15
- 大小:19.96KB
UG后处理tcl语言解释Word文档下载推荐.docx
《UG后处理tcl语言解释Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《UG后处理tcl语言解释Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
/bin/sh
#nextlinerestartsusingtclshinpath\
exectclsh${1+"
$@"
}
#echoserverthatcanhandlemultiple
#simultaneousconnections.
procnewConnection{sockaddrport}{
#clientconnectionswillbehandledin
#line-buffered,non-blockingmode
fconfigure$sock-blockingno-bufferingline
#callhandleDatawhensocketisreadable
fileevent$sockreadable[listhandleData$sock]
}
prochandleData{
puts$sock[gets$sock]
if{[eof$sock]}{
close$sock
#handleallconnectionstoportgiven
#asargumentwhenserverwasinvoked
#bycallingnewConnection
setport[lindex$argv0]
socket-servernewConnection$port
#entertheeventloopbywaiting
#onadummyvariablethatisotherwise
#unused.
vwaitforever
另外一个TK的例子(来自AsimpleA/Dclock)它使用了定时器时间,3行就显示了一个时钟。
procevery{msbody}{eval$body;
after$ms[infolevel0]}
pack[label.clock-textvartime]
every1000{set:
:
time[clockformat[clocksec]-format%H:
%M:
%S]};
#RS
解释:
第一行定义了过程every,每隔ms毫秒,就重新执行body代码。
第二行创建了标签起内容由time变量决定。
第3行中设置定时器,time变量从当前时间中每秒更新一次。
Tcl被广泛的用做script语言,大多数情况下,Tcl和Tk(“ToolKit”)库同时使用,Tk是一系列令Tcl易于编写图形用户接口的命令和过程
Tcl的一个重要特性是它的扩展性。
如果一个程序需要使用某些标准Tcl没有提供的功能,可以使用c语言创造一些新的Tcl命令,并很容易的融合进去。
正是由于Tcl易于扩展,很多人为它编写了扩展包,并在网上共享。
Tcl和其他编程语言例如c不同,它是一种解释语言而非编译语言。
Tcl程序由一系列Tcl命令组成,在运行时由Tcl解释器解释运行。
解释运行的一个优点是它可以自己为自己生成Tclscript。
变量和变量交换
不像c,Tcl的变量在使用前不需要声明。
Tcl的变量在它首次被赋值时产生,使用set命令。
变量可以用unset命令删除,虽然并不强制需要这样做。
变量的值通过$符号访问,也叫变量交换。
Tcl是一个典型的”弱类型定义”语言,这意味者任何类型可以存储在任何变量中。
例如,同一个变量可以存储数字,日期,字符串甚至另一段Tclscript.
Example1.1:
setfoo"
john"
puts"
Himynameis$foo"
Output:
Himynameisjohn
Example1.2:
setmonth2
setday3
setyear97
setdate"
$month:
$day:
$year"
puts$date
2:
3:
97
Example1.3:
putshi"
eval$foo
hi
在这个例子里,变量foo存储了另外一段Tclscript.
表达式
包括数学表达式,关系表达式,通常用expr命令。
Example2.1:
expr0==1
0
Example2.2:
expr1==1
1
两数比较,true则输出1,false输出0
Example2.3:
expr4+5
9
Example2.4:
exprsin
(2)
0.909297
命令传递
以运算结果替代Tcl命令中的部分
Example3.1:
Iam[expr10*2]yearsold,andmyI.Q.is[expr100-25]"
Iam20yearsold,andmyI.Q.is75
方括号是命令传递的标志
Example3.2:
setmy_height6.0
IfIwas2inchestaller,Iwouldbe[expr$my_height+(2.0/12.0)]feettall"
IfIwas2inchestaller,Iwouldbe6.16667feettall
命令流控制
Tcl有判断流转(if-else;
switch)和循环控制(while;
for;
foreach)
Example4.1:
setmy_planet"
earth"
if{$my_planet=="
}{
Ifeelrightathome."
}elseif{$my_planet=="
venus"
Thisisnotmyhome."
}else{
IamneitherfromEarth,norfromVenus."
settemp95
if{$temp<
80}{
It'
salittlechilly."
Warmenoughforme."
Ifeelrightathome.
Warmenoughforme.
Example4.2:
setnum_legs4
switch$num_legs{
2{puts"
Itcouldbeahuman."
4{puts"
Itcouldbeacow."
6{puts"
Itcouldbeanant."
8{puts"
Itcouldbeaspider."
default{puts"
Itcouldbeanything."
Itcouldbeacow.
Example4.3:
for{seti0}{$i<
10}{incri1}{
Intheforloop,andi==$i"
Intheforloop,andi==0
Intheforloop,andi==1
Intheforloop,andi==2
Intheforloop,andi==3
Intheforloop,andi==4
Intheforloop,andi==5
Intheforloop,andi==6
Intheforloop,andi==7
Intheforloop,andi==8
Intheforloop,andi==9
Example4.4:
seti0
while{$i<
10}{
Inthewhileloop,andi==$i"
incri1
Inthewhileloop,andi==0
Inthewhileloop,andi==1
Inthewhileloop,andi==2
Inthewhileloop,andi==3
Inthewhileloop,andi==4
Inthewhileloop,andi==5
Inthewhileloop,andi==6
Inthewhileloop,andi==7
Inthewhileloop,andi==8
Inthewhileloop,andi==9
Example4.5:
foreachvowel{aeiou}{
$vowelisavowel"
aisavowel
eisavowel
iisavowel
oisavowel
uisavowel
Procedures
参数定义方法
Tcl的Procedures和c的函数差不多.它们有参数,它们返回值。
基本定义方法是:
procnameargListbody
当一个procedure被定义,它就被看做是一个命令,如同Tcl的自带命令一样,通过名字来呼叫,名字后面跟上参数。
缺省的,procedure的返回值是它的最后一个命令结果。
但也可以通过return命令来返回其他值。
Return值可以在procedure的任何地方,一旦执行,procedure就此返回。
Example5.1:
procsum_proc{ab}{
return[expr$a+$b]
procmagnitude{num}{
if{$num>
0}{
return$num
setnum[expr$num*(-1)]
setnum112
setnum214
setsum[sum_proc$num1$num2]
Thesumis$sum"
Themagnitudeof3is[magnitude3]"
Themagnitudeof-2is[magnitude-2]"
Thesumis26
Themagnitudeof3is3
Themagnitudeof-2is2
在procedure中可以通过set创造变量,但是变量只在procedure中有效,而且一旦procedure返回,这些变量就不可访问。
如果procedure需要访问主程序中的变量,就需要使用global关键字。
Example5.2:
procdumb_proc{}{
setmyvar4
Thevalueofthelocalvariableis$myvar"
globalmyglobalvar
Thevalueoftheglobalvariableis$myglobalvar"
setmyglobalvar79
dumb_proc
Thevalueofthelocalvariableis4
Thevalueoftheglobalvariableis79
List
Lists就好像是Tcl中的一种特殊的数组。
它把一堆东西放成一个集合,然后就像操作一个整体一样的操作它。
Example6.1:
setsimple_list"
JohnJoeMarySusan"
puts[lindex$simple_list0]
puts[lindex$simple_list2]
John
Mary
注意list的index是从0开始的
Example6.2:
setsimple_list2"
MikeSamHeatherJennifer"
setcompound_list[list$simple_list$simple_list2]
puts$compound_list
puts[llength$compound_list]
{JohnJoeMarySusan}{MikeSamHeatherJennifer}
2
Example6.3:
setmylist"
MercuryVenusMars"
puts$mylist
setmylist[linsert$mylist2Earth]
lappendmylistJupiter
MercuryVenusMars
MercuryVenusEarthMars
MercuryVenusEarthMarsJupiter
Arrays
Tcl数组在使用前无须定义,大小也不用指定。
Example7.1:
setmyarray(0)"
Zero"
setmyarray
(1)"
One"
setmyarray
(2)"
Two"
3}{incri1}{
puts$myarray($i)
Zero
One
Two
Example7.2:
setperson_info(name)"
FredSmith"
setperson_info(age)"
25"
setperson_info(occupation)"
Plumber"
foreachthing{nameageoccupation}{
$thing==$person_info($thing)"
name==FredSmith
age==25
occupation==Plumber
这个例子指出数组的index不需要是数字,其他类型的数据也可以。
Example7.3:
foreachthing[arraynamesperson_info]{
Strings
字符串是Tcl中最常用的类型,string有很多使用参数,可以参照Tcl手册。
使用方法:
stringoptionargarg...
Example8.1:
setstr"
Thisisastring"
Thestringis:
$str"
Thelengthofthestringis:
[stringlength$str]"
Thecharacteratindex3is:
[stringindex$str3]"
Thecharactersfromindex4through8are:
[stringrange$str48]"
Theindexofthefirstoccurrenceofletter\"
i\"
is:
[stringfirsti$str]"
Thestringis:
Thisisastring
Thelengthofthestringis:
16
Thecharacteratindex3is:
s
Thecharactersfromindex4through8are:
isa
Theindexofthefirstoccurrenceofletter"
i"
2
Input/Output
Tcl的绝大多数输入/输出是通过puts和gets做到的。
Puts命令显示在console上,gets命令从console输入上取得数据,并存储在某个变量中。
getschannelIdvarName
channelID可以理解为c的文件句柄,varName如果定义,输入值就赋给它,gets返回读入的字节数,否则gets直接返回输入值。
Example9.1:
puts-nonewline"
Enteryourname:
"
setbytesread[getsstdinname]
Yournameis$name,anditis$bytesreadbyteslong"
(notethatuserinputisshowninitalics)
Enteryourname:
Shyam
YournameisShyam,anditis5byteslong
Example9.2:
setf[open"
/tmp/myfile"
w"
]
puts$f"
WeliveinTexas.It'
salready110degreesouthere."
456"
close$f
(none)
Open打开了一个"
作为channel.用法是:
opennameaccess
access参数指出打开文件的方式,”w”是读写。
这时可以用puts$f把内容写入文件
Example9.3:
r"
setline1[gets$f]
setlen_line2[gets$fline2]
line1:
$line1"
line2:
$line2"
Lengthofline2:
$len_line2"
line1:
WeliveinTexas.It'
salready110degreesouthere.
line2:
456
Lengthofline
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UG 处理 tcl 语言 解释