版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
日期:2012-03-122011-1-11、TCL腳本語(yǔ)言介紹2、TCL的語(yǔ)法3、TCL的變量4、TCL的表達(dá)式5、TCL常用命令6、TCL的控制7、TCL的過(guò)程8、TCL的字符串操作9、TCL的list10.學(xué)習(xí)TCL的一些建議和方法針對(duì)TCl腳本語(yǔ)言的新手2小時(shí)田顯蘭使沒(méi)有接觸過(guò)TCL腳本語(yǔ)言的同事對(duì)TCL腳本語(yǔ)言的基礎(chǔ)概念和基礎(chǔ)知識(shí)有一定的了解??梢允褂肨CL腳本語(yǔ)言進(jìn)行簡(jiǎn)單的編程。培訓(xùn)目的培訓(xùn)對(duì)象培訓(xùn)講師學(xué)習(xí)重點(diǎn)培訓(xùn)課時(shí)1、TCL腳本語(yǔ)言介紹TCL腳本語(yǔ)言培訓(xùn)TCL(Tool
Command
Language)是一種解釋執(zhí)行的腳本語(yǔ)言提供通用的編程能力:支持變量、過(guò)程和控制結(jié)構(gòu),經(jīng)常被用于快速原型開(kāi)發(fā),腳本編程,GUI和測(cè)試等方面TCL擁有一個(gè)功能強(qiáng)大的固有的核心命令集,同時(shí)支持根據(jù)需要對(duì)TCL語(yǔ)言進(jìn)行擴(kuò)展解釋器同等對(duì)待固有命令集和擴(kuò)展命令集
TCL的優(yōu)點(diǎn):語(yǔ)法簡(jiǎn)單,解釋執(zhí)行,可擴(kuò)展,跨平臺(tái)2、TCL的語(yǔ)法2-1、腳本、命令和單詞符號(hào)一個(gè)TCL腳本可以包含一個(gè)或多個(gè)命令。命令之間必須用換行符或分號(hào)隔開(kāi)。在所有TCL腳本中,系統(tǒng)內(nèi)部的命令名是小寫(xiě)格式Example:
seta100setb101setc102;setd103TCL的每一個(gè)命令包含一個(gè)或幾個(gè)單詞,第一個(gè)單詞代表命令名,另外的單詞則是這個(gè)命令的參數(shù),單詞之間必須用空格或TAB鍵隔開(kāi)。命令之間是可以嵌套的Example:
seta 100setb[expr$a+1]TCL腳本語(yǔ)言培訓(xùn)2-2、置換的引入2、TCL的語(yǔ)法TCL解釋器對(duì)一個(gè)命令的求值過(guò)程分為兩部分:分析和執(zhí)行。在分析階段,TCL解釋器運(yùn)用規(guī)則把命令分成一個(gè)個(gè)獨(dú)立的單詞,同時(shí)進(jìn)行必要的置換(substitution);在執(zhí)行階段,TCL解釋器會(huì)把第一個(gè)單詞當(dāng)作命令名,并查看這個(gè)命令是否有定義,如果有定義就激活這個(gè)命令對(duì)應(yīng)的C/C++過(guò)程,并把所有的單詞作為參數(shù)傳遞給該命令過(guò)程,讓命令過(guò)程進(jìn)行處理。Example:
setlog“test”setcurrent“test.tcl”LOG::AppErr$log[expr$[namespacecurrent]::current]“error”
置換可以發(fā)生在包含命令名在內(nèi)的每一個(gè)單詞中,而且置換可以嵌套Example:
seta1setb$a2TCL提供三種形式的置換:變量置換、命令置換和反斜杠置換。TCL腳本語(yǔ)言培訓(xùn)2-3、三種置換類(lèi)型2、TCL的語(yǔ)法變量置換由一個(gè)$符號(hào)標(biāo)識(shí),變量置換會(huì)導(dǎo)致變量的值插入一個(gè)單詞中。TCL解釋器在分析一個(gè)變量置換時(shí),只把從$往后直到第一個(gè)不是字符,數(shù)字或下劃線(xiàn)的字符之間的單詞符號(hào)作為被置換的變量的名字Example:
seta“hello”;seta_1“hello”;seta-1“hello”setb“$aworld!”;setc“$a_1world!”;setd“$a-1world!”命令置換是由[]括起來(lái)的TCL命令及其參數(shù)。命令置換會(huì)導(dǎo)致某一個(gè)命令的所有或部分單詞被另一個(gè)命令的結(jié)果所代替。[]中必須是一個(gè)合法的TCL腳步,長(zhǎng)度不限。[]中腳本的值為最后一個(gè)命令的返回值Example:setb[expr100*10]反斜杠替換相當(dāng)于C語(yǔ)言中反斜杠的作用,主要用于在單詞符號(hào)中插入諸如換行符、空格、[、$等被TCL解釋器當(dāng)作特殊符號(hào)對(duì)待的字符Example:seta\[a]setb\$100TCL腳本語(yǔ)言培訓(xùn)2-5、注釋2、TCL的語(yǔ)法TCL中的注釋符是‘#’,‘?!椭钡剿谛薪Y(jié)尾的所有字符都被TCL看作注釋?zhuān)琓CL解釋器對(duì)注釋將不作任何處理。不過(guò),要注意的是,‘#’必須出現(xiàn)在TCL解釋器期望命令的第一個(gè)字符出現(xiàn)的地方,才被當(dāng)作注釋。Example:
#Thisisacommentseta100#Notacommentsetb100;#ThisisacommentTCL腳本語(yǔ)言培訓(xùn)3、變量TCL腳本語(yǔ)言培訓(xùn)TCL支持兩種類(lèi)型的變量:簡(jiǎn)單變量和數(shù)組。簡(jiǎn)單變量包含兩個(gè)部分:名字和值。名字和值都可以是任意字符串。例如一個(gè)名為“13237&*:hdgg”的變量在TCL中都是合法的。不過(guò)為了更好的使用置換(substitution),變量名最好按C\C++語(yǔ)言中標(biāo)識(shí)符的命名規(guī)則命名。TCL解釋器在分析一個(gè)變量置換時(shí),只把從$符號(hào)往后直到第一個(gè)不是字母、數(shù)字或下劃線(xiàn)的字符之間的單詞符號(hào)作為要被置換的變量的名字。數(shù)組是一些元素的集合。TCL的數(shù)組和普通計(jì)算機(jī)語(yǔ)言中的數(shù)組有很大的區(qū)別。在TCL中,不能單獨(dú)聲明一個(gè)數(shù)組,數(shù)組只能和數(shù)組元素一起聲明。數(shù)組中,數(shù)組元素的名字包含兩部分:數(shù)組名和數(shù)組中元素的名字,TCL中數(shù)組元素的名字(下標(biāo)〕可以為任何字符串Example:
setday(monday)1setday(tuesday)2
TCL不能支持復(fù)雜的數(shù)據(jù)類(lèi)型
4、表達(dá)式TCL腳本語(yǔ)言培訓(xùn)TCL中的表達(dá)式類(lèi)似于ANSIC的表達(dá)式。表達(dá)式由操作數(shù)和操作符構(gòu)成。TCL表達(dá)式的操作數(shù)通常是整數(shù)或?qū)崝?shù)。整數(shù)一般是十進(jìn)制的,但如果整數(shù)的第一個(gè)字符是0(zero),那么TCL將把這個(gè)整數(shù)看作八進(jìn)制的,如果前兩個(gè)字符是0x則這個(gè)整數(shù)被看作是十六進(jìn)制的。TCL的實(shí)數(shù)的寫(xiě)法與ANSIC中完全一樣。TCL中用到的運(yùn)算符,它們的語(yǔ)法形式和用法跟ANSIC中很相似。需要注意的一點(diǎn)是,數(shù)學(xué)函數(shù)并不是命令,只在表達(dá)式中出現(xiàn)才有意義。expr
命令:exprarg?arg...?expr可以有一個(gè)或多個(gè)參數(shù),它把所有的參數(shù)組合到一起,作為一個(gè)表達(dá)式,然后求值Example:
expr1+2*3
5-2、append、incr5、TCL的常用命令TCL腳本語(yǔ)言培訓(xùn)append命令用于把文本加到一個(gè)變量的后面命令格式:append
varName?valuevaluevalue...?Example:
appendtest“hello”
appenda$bvsseta$a$bincr命令用于增加變量的值命令格式:incr
varName?increment?
Example:
incrtest2incrtestincrtest-16-1、if6、TCL的控制TCL腳本語(yǔ)言培訓(xùn)命令格式:if
expr1?then?body1
elseif
expr2?then?body2
elseif...?else??bodyN?
Example:
if{$vbl==1}{puts"vblisone"}
if{$vbl==1}{puts"vblisone"}else{puts"vblisnotone"}
if{$vbl==1}{puts"vblisone"}elseif{$vbl==2}{puts"vblistwo"}else{puts"vblisnotoneortwo"}
if{$vbl==1||$vbl==2||$vbl==3}then{puts"vblisone,twoorthree"}注意:if和{之間一定要有空格,body的{一定要與if同行6-2、for6、TCL的控制TCL腳本語(yǔ)言培訓(xùn)命令格式:for
starttestnextbody
Example:
for{setx0}{$x<10}{incrx}{puts"xis$x“}
for{setx0}$x<10{incrx}{puts"xis$x"}注意:test必須用花括號(hào)括起來(lái),推遲置換。6-4、foreach6、TCL的控制TCL腳本語(yǔ)言培訓(xùn)命令格式:foreach
varnamelistbody
foreach
varlist1list1?varlist2list2...?body
Example:
setvalues{13572468}foreachx$values{puts"$x}
setx{}
foreach{ij}{abcdef}{lappendx$j$i}
foreachi{abc}j{defg}{lappendx$i$j}
6-5、switch6、TCL的控制TCL腳本語(yǔ)言培訓(xùn)命令格式:switch?options?stringpatternbody?patternbody...?
switch?options?string{patternbody?patternbody...?}
Example:
switchxyz{a-b{expr{1}}c{expr{2}}default{expr{3}}}7、TCL的過(guò)程TCL腳本語(yǔ)言培訓(xùn)TCL支持過(guò)程的定義和調(diào)用,在TCL中,過(guò)程可以看作是用TCL腳本實(shí)現(xiàn)的命令,效果與TCL的固有命令相似。我們可以在任何時(shí)候使用proc命令定義自己的過(guò)程,TCL中的過(guò)程類(lèi)似于C中的函數(shù)。過(guò)程的返回值是過(guò)程體中最后執(zhí)行的那條命令的返回值
proc命令用于創(chuàng)建一個(gè)TCL過(guò)程命令格式:proc
nameargsbodyExample:procprintArgumentsargs{foreacharg$args{puts$arg}}procmult{varName{multiplier2}}{upvar1$varNamevarsetvar[expr{$var*$multiplier}]}7-1、過(guò)程的定義7、TCL的過(guò)程TCL腳本語(yǔ)言培訓(xùn)對(duì)于在過(guò)程中定義的變量,因?yàn)樗鼈冎荒茉谶^(guò)程中被訪(fǎng)問(wèn),并且當(dāng)過(guò)程退出時(shí)會(huì)被自動(dòng)刪除,所以稱(chēng)為局部變量;在所有過(guò)程之外定義的變量我們稱(chēng)之為全局變量。TCL中,局部變量和全局變量可以同名,兩者的作用域的交集為空:局部變量的作用域是它所在的過(guò)程的內(nèi)部;全局變量的作用域則不包括所有過(guò)程的內(nèi)部。這一點(diǎn)和C語(yǔ)言有很大的不同.如果我們想在過(guò)程內(nèi)部引用一個(gè)全局變量的值,可以使用global命令Example:
seta100
procsample{x}{globalaincrareturn[expr$a+$x]}
7-3、局部變量與全局變量7、TCL的過(guò)程TCL腳本語(yǔ)言培訓(xùn)upvar命令用于用戶(hù)在過(guò)程中對(duì)全局變量或其他過(guò)程中的局部變量進(jìn)行訪(fǎng)問(wèn)命令格式:upvar?level?otherVarmyVar?otherVarmyVar...?
upvar命令的第一個(gè)參數(shù)otherVar是我們希望以引用方式訪(fǎng)問(wèn)的參數(shù)的名字,第二個(gè)參數(shù)myVar是這個(gè)過(guò)程中的局部變量的名字,一旦使用了upvar命令把otherVar和myVar綁定,那么在過(guò)程中對(duì)局部變量myVar的讀寫(xiě)就相當(dāng)于對(duì)這個(gè)過(guò)程的調(diào)用者中otherVar所代表的局部變量的讀寫(xiě)。level參數(shù)表示:調(diào)用upvar命令的過(guò)程相對(duì)于我們希望引用的變量myVar在調(diào)用棧中相對(duì)位置Example:proctemp{arg}{upvar$argbsetb[expr$b+2]}
upvar2otherx;#訪(fǎng)問(wèn)當(dāng)前過(guò)程的調(diào)用者的調(diào)用者中的otherupvar#0otherx;#訪(fǎng)問(wèn)全局的變量other7-4、引用upvar8、TCL的字符串操作(一)TCL腳本語(yǔ)言培訓(xùn)string命令具有強(qiáng)大的操作字符串的功能,其中的option選項(xiàng)多達(dá)20個(gè)stringcompare?-nocase??-lengthint?string1string2把字符串string1和string2進(jìn)行比較,返回值為-1、0或1,分別對(duì)應(yīng)string1小于、等于或大于string2。如果有-length參數(shù),那么只比較前int個(gè)字符,如果int為負(fù)數(shù),那么這個(gè)參數(shù)被忽略。如果有-nocase參數(shù),那么比較時(shí)不區(qū)分大小寫(xiě)。
stringequal?-nocase??-lengthint?string1
string2
把字符串string1和string2進(jìn)行比較,如果兩者相同,返回值為1,否則返回0。其他參數(shù)與stringcompare同。stringfirststring1
string2?startindex?在string2中從頭查找與string1匹配的字符序列,如果找到,那么就返回匹配的第一個(gè)字母所在的位置(0-based)。如果沒(méi)有找到,那么返回-1。如果給出了startindex變量,那么將從startindex處開(kāi)始查找。8、TCL的字符串操作(三)TCL腳本語(yǔ)言培訓(xùn)stringrangestring
first
last返回字符串string中從第first個(gè)到第last個(gè)字符的子字符串(0-based)。如果first<0,那么first被看作0,如果last大于或等于字符串的長(zhǎng)度,那么last被看作end,如果first比last大,那么返回空。stringrepeatstring
count返回值為:重復(fù)了string字符串count次的字符串stringreplacestring
first
last?newstring?返回值為:從字符串string中刪除了第first到第last個(gè)字符(0-based)的字符串,如果給出了newstring變量,那么就用newstring替換從第first到第last個(gè)字符。如果first<0,那么first被看作0,如果last大于或等于字符串的長(zhǎng)度,那么last被看作end,如果first比last大或者大于字符串string的長(zhǎng)度或者last小于0,那么原封不動(dòng)的返回string
stringtolowerstring?first??last?返回值為:把字符串string轉(zhuǎn)換成小寫(xiě)后的字符串,如果給出了first和last變量,就只轉(zhuǎn)換first和last之間的字符。9、TCL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化工熱交換工復(fù)試水平考核試卷含答案
- 吉他制作工班組評(píng)比能力考核試卷含答案
- 紫膠制片工達(dá)標(biāo)模擬考核試卷含答案
- 2026廣東深圳大學(xué)土木與交通工程學(xué)院周英武特聘教授團(tuán)隊(duì)招聘研究助理1人備考題庫(kù)及答案詳解一套
- 2026江蘇蘇州工業(yè)園區(qū)環(huán)洲幼兒園后勤輔助人員招聘1人備考題庫(kù)及參考答案詳解一套
- 2026年淄博高青縣教育和體育局所屬事業(yè)單位公開(kāi)招聘工作人員的備考題庫(kù)(25人)帶答案詳解
- 肌內(nèi)注射的護(hù)理研究進(jìn)展
- 老年疼痛綜合征的多學(xué)科鎮(zhèn)痛方案優(yōu)化
- 企業(yè)安全生產(chǎn)管理制度
- 2026上海第二工業(yè)大學(xué)招聘66人備考題庫(kù)及1套參考答案詳解
- 2026年榆能集團(tuán)陜西精益化工有限公司招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 2026年及未來(lái)5年中國(guó)化妝品玻璃瓶行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2026年魯教版初三政治上冊(cè)月考真題試卷(含答案)
- 物業(yè)春節(jié)前安全生產(chǎn)培訓(xùn)課件
- 企業(yè)安全生產(chǎn)責(zé)任制培訓(xùn)教材(標(biāo)準(zhǔn)版)
- 零缺陷培訓(xùn)教學(xué)課件
- 2026年餐飲企業(yè)稅務(wù)合規(guī)培訓(xùn)課件與發(fā)票管理風(fēng)控方案
- 2025年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)蓖麻油行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2025年湖北煙草專(zhuān)賣(mài)局真題試卷及答案
- 2025-2026學(xué)年廣東省廣州113中學(xué)八年級(jí)(上)期中語(yǔ)文試卷
- 浙江省臺(tái)金七校聯(lián)盟2025-2026學(xué)年高一上學(xué)期11月期中聯(lián)考語(yǔ)文試題含答案
評(píng)論
0/150
提交評(píng)論