日語口譯費用set Days 7
puts stdout "Hello, World! \a"
if/then/else/elsif 已在前面幾屏中演示過。在正式語法中會用到 then,但平常會省略掉它。
TCL
說話(五)
~/tcltk$ tclsh
}
~/tcltk$ cat input01.txt
{Bob Carol} {Ted Alice}




固然設計之初 Tcl 陣列是一維的,但有一個類比多維佈局的好方法。因為下標是任意字串,所以二維陣列可以聲明以下:

return 1
proc UserAdd { Acct rName eMail phone } {
#


set array($i,$j) 3.14159
檔和路徑操作是跨平臺情況中具有挑戰性的問題。對於主機 OSTcl 利用 UNIX 路徑名(缺省環境下,用‘/’字元分隔)和本機路徑名佈局翻譯即便當程式內的資料機關准確時,也很難確保用戶輸入與系統需求匹配翻譯file join 敕令用於將 UNIX 格式轉換本錢機路徑名。其他路徑字串命令包孕 file splitdirnamefile extensionnativenamepathtype tail
% linsert $Party1 1 Richard
% set c2 [list Ted Alice]


% while {[gets $InFile Op] >= 0} {
在左側這個示例中,foreach 佈局給 switch 饬令提供命令行引數。當處理引數時(注意:不准確的輸入會終止劇本,因為還沒有實現處置錯誤的 catch),while 迴圈經由過程為每一行調用進程並同時對行計數器加 1 來處置輸入翻譯代碼段竣事時,返回處置的行數。
# metacharacter usage
set Pints 6
puts stdout [UserAdd bpb Brian bilbrey@junk.com 555-1212]
0
Marcia
~/tcltk$ tclsh
TCL
語言(六)
linsert $List n item... —
在列表中的指定位置上插入一項或多項,向下移列表中的其他項翻譯



% string match *ello* $Phrase

  其次,Tcl是一個庫包,可以被嵌入運用程式,Tcl的庫包括了一個闡明器、用於履行內建饬令的常式和可使翻譯公司擴充(界說新的 過程)的庫函數。利用程式可以產生Tcl饬令並執行,饬令可以由用戶產生,也能夠從用戶介面的一個輸入中讀取(按鈕或功能表等)。 Tcl庫收到敕令後將它分化並履行內建的命令,經常會產生遞迴的挪用。
鄙人面的清單中,將會發現第一個很常見的示例程式,它是用 Tcl 實現的。這是一個完整的劇本:第一行饬令挪用 tclsh 情況,第二行饬令履行現實工作翻譯用您所選擇的文本編纂器建立該劇本,輸入 chmod +x hello.tcl 使之成為可履行檔,然後履行它以測試您這件作品
#!/usr/bin/tclsh
左側這個示例使用了其中一些運算符和函數來較量爭論指定點到原點之間的距離,並返回給定半徑的圓的周長和面積。別的,在這個示例中,利用列表下標(lindex)命令來會見 $argv 的個別元素。
Log
函數是 exp(x)log(x) log10(x)
#!/usr/bin/tclsh

set Pints 6

TCL
說話(三)
puts stdout "\a"
puts stdout "$argv0 on X Display $env(DISPLAY) "

} else {

Hello, World! \a
\c
回顯‘c’


Distance = 5.0
~/tcltk$ tclsh
\
反斜
% set Party1 [list $c1 $c2]
puts stdout "Distance = $Dist"


~/tcltk$ ./hello2.tcl
  首先,Tcl是一種簡單的劇本說話,首要利用於發佈號令給一 些互交程式如文本編纂器、調試器和shell。它有一個簡單的語法 和很強可擴充性,Tcl可以創建新的進程以加強其內建饬令的能力翻譯
# filename hello2.tcl
#!/usr/bin/tclsh
% array names People
Sun Mar 25 13:52:19 PST 2001
% set People(friend) Tom

set Operation "expr $Op"
# using procedural wrappers
文件把持使用下列號令:openclosegetsputsreadtellseekeof flush。如左側所示,在檔打開命令期間 catch 命令對毛病搜檢是有效的翻譯當在遇到新的一行字元之前需要列印程式輸出時,如在用戶資料提醒符中,利用 flush 來寫輸出緩衝區。
Tcl
元字元

% gets $Chan

#!/usr/bin/tclsh
算術函數是 ceil(x)floor(x)fmod(x翻譯社 y)pow(x, y)abs(x)int(x)double(x) round(x)
感化域法則描寫了進程和變數名和值在程式的分歧條理上的可見性。例如,在劇本的最外層界說的變數是整體變數翻譯缺省情況下,整體變數是不可見的,在進程內部也不成用它們的值。這允許進程的編寫者自由地界說變數名並賦值,而不必憂慮覆蓋對於局部感化域上未知的主要變數。要使整體變數在進程內部變得可見,必需將它聲明為在進程內,就象在上一屏的示例中,對 PI 使用 global 敕令那樣翻譯
Tcl
Tk 是註釋型的、可擴大腳本說話。與 BSD 許可證十分相似,該許可證答應在任何情形下自由利用該軟體,只要在所有副本中保存該版權而且在任何分發中一字不差地傳遞公告。這個許可證條款使 Tcl/Tk 成為自由軟體。

#
注釋
% file executable testit
***
利用 file ... 敕令而不利用經由過程 exec 的本機命令的好處在於,前者會提供一個可移植介面。TCL說話(十)
% string wordend $Phrase 7

set uData($Acct,phone) $phone

error "Unknown $Arg"

# to confuse Vanna White...
% if [catch {open foo r} Chan] {
eval 用於動態劇本
Tcl
字串和模式匹配
Tcl
中的資料構造

TCL
語言(八)
Circumference = 31.4159265359
home

在它扮演的對象節制說話腳色中,Tcl 有許很多多種內部檔測試和操作功能。每條號令都以 file 開始,正如 file exists name 中一樣。其他測試敕令(它們都返回布林值)包孕 executableisdirectoryisfileownedreadable writable

% string toupper $Phrase


set rad 3
switch -glob -- $Arg {
0
friend boss spouse
~/tcltk$ ./hello3.tcl
Tom

#!/usr/bin/tclsh

\v
垂直製錶

set Rad [lindex $argv 2]
Tom Bob
One
set N 1
% nslookup orbdesigns.com

\t
程度製錶
~/tcltk$ tclsh
HELLO翻譯社 WORLD!
rand()
srand(x) 是處置亂數的函數。



% puts stdout $d

ewline 新行
\
行繼續(在行尾)
lappend $List item... —
將項附加到列表。

表示資訊的 string 饬令是 length bytelength(可以有所分歧,這取決於字元集)翻譯返回布林值(1 0)的比較是 compareequal match翻譯這裏的模式匹配是由檔案名替代(簡單類型的匹配通常與外殼操作相幹)完成。還可以通過奇特的 regex regsub 敕令來利用高級正規運算式
;
newline 語句分隔符號

{ string }
不帶替換的引用

global uData
brian
}
set Dist [expr sqrt(($X*$X)+($Y*$Y))]
~/tcltk$ ./hello3.tcl ring
~/tcltk$ ./maths.tcl 3 4 5



# and backslash substitution

1 + 2 = 3

4 + 5 = 9

7 - 9 = -2

%

~/tcltk$ ./datas.tcl
/home/dir2/dir3
~/tcltk$ ./hello.tcl
puts stdout "The answer to the universe is [eval $Pints * $Days]! "

Hello翻譯社 world!
Tcl
中的迴圈和分支
~/tcltk$ cat maths.tcl
#!/usr/bin/tclsh
0
列表在 Tcl 中有兩個首要用處翻譯我們已經在經由過程 foreach 敕令(在 Tcl 中的迴圈和分支中找到)處置懲罰命令行引數的情況中看到第一個用處。第二個用處是動態地構建 Tcl 饬令的元素,可以在本教程後面看到使用 eval 饬令來履行這類用途翻譯

% set People(friend) [concat $People(friend) Bob]
***
正如一般的變數一樣,使用 set 號令初始化陣列,如左側所示翻譯圓括號內是給出的下標部分。請注意,圓括號不象花括弧或雙引號那樣提供分組。一旦初始化為陣列,就不克不及將變數作為單一變數來拜候。如左側列表底部所示,陣列元素也能夠是列表。
% set Party2 [concat $c1 $c2]
hello, world!
% set InFile [open input01.txt r]

% gets $Chan

左側這個示例中,在將 uData 聲明為整體變數後,代碼履行查抄,以查看帳戶是否已不存在。若是存在,則進程返回(非零)錯誤新聞。這個返回可以用於切換到生成毛病文本輸出翻譯對於本例,我們簡單地供給三個連續輸入,個中包孕一次反複輸入翻譯這會產生如示例底部所示的輸出,“1”默示由於一個重複的帳戶名稱而引發的一個毛病返回,這是我們成心如許做的。
Sun Mar 25 13:51:59 PST 2001

\r
回車
default {
Nice day翻譯社 eh?
TCL
語言(七)

% set dir2 brian

理解 Tcl 陣列的捷徑是,將它們視作與 Perl 散列溝通的器材。Tcl 陣列不是用數位建立下標的線性資料佈局,除非選擇對資料強加那種诠釋。儘管帶空格的字串需要用引號括起或需要一個變數引用,但下標(或鍵)可所以任何字串。
Server: 192.168.1.3


Tom Bob

********
***
~/tcltk$ tclsh
if {$Arg == "ring"} {
puts stdout "The answer to the universe is [eval $Pints * $Days]! "




Address: 64.81.69.163
% string totitle $Phrase
puts stdout "Circumference = $Cir"
if {$argc >= 1} {
# This program code shows


在接下來的幾屏中,將回首 Tcl 說話的一些主要特征,從元字元和整體變數到運算符、數學函數和核心號令翻譯究竟,這些命令使 Tcl/Tk 成為有特點的,逐漸成長的說話翻譯請記住,在本教程中沒有篇幅觸及每條命令翻譯這裏只凸起一部份,今後您可以更進一步瞭解 Tcl/Tk


Tcl
整體變數和反斜杠替換
foreach Arg $argv {
set array($i,$j) 2.71828
% set dir3 tcltk
# This program code shows


relative
在左側的列表中,輸入檔由三行構成,每行都顯示了一種算術運算。調用 tclsh 後,檔以唯讀體例打開並與 $InFile 變數相幹聯翻譯while 迴圈每次將一行讀入到 $Op 中。然後,經由過程預先計畫將 expr 映照到 $Op 變數來機關整個 Tcl 命令翻譯然後,擴展,求值,從而分派成果。最後,在 stdout 上顯示每步操作和成果翻譯
puts stdout "Hello, World! \a"

1
proc
敕令界說 Tcl 進程。一旦界說後,就能夠象內置的 Tcl 敕令那樣挪用或利用它翻譯別的,可以用缺省值定義這些參數;例如,將左側的界說更改為讀取 proc c_area { {rad 1} } 翻譯這將調用沒有參數的 c_area 進程,並返回單位圓的面積。
% file delete testit~

別的一個功能(在受支持的情況中)是以打開檔的體例打開管道的能力。例如,用 set Channel [open "|sort foobar" r] 打開管道通道後,第一個 gets 的輸出將是“Eight”(檔資料“One”“Ten”的輸出在 10 個零丁的行上按字母按次排列)。
Tcl
整體變數和反斜杠替換




The answer to everything is 42!

friend Tom boss Jack spouse Marcia
在這個示例中,您可以感應 eval 敕令的強大功能。在正常情形下,Tcl 註釋器以一遍體式格局(one-pass)操作:它首先對輸入的饬令行(可能延長在幾個物理行上)進行解析,並履行任何替換。然後開始履行,除非找到不正常或殘缺饬令翻譯eval 允許第二遍體式格局(second pass)(或許更切確地講,是預經由過程(pre-pass))。因此,可以先動態組織 Tcl 命令,然落後行解析並履行它。

Bob Carol Ted Alice
# filename hello2.tcl
其餘列表號令還包括 lreplacelsearch lsortsplit 命令將字串作為輸入並生成經由准確解析的列表,而且在指定的字元處斷開字串。join 執行相反操作,接管列表元素並將它們串在一路,用 joinstring 分隔它們翻譯



return 0
字元 用作
Tom
...
0

# parse command line switches

foreach Arg $argv {
~/tcltk$ ./protest.tcl
}
proc circum {


HELLO, WORLD!

%

# Demonstrate operators and
#!/usr/bin/tclsh
}
...
while {[gets stdin Line] >= 0} {

TCL語言
% append Phrase "Nice day, eh?"



Jack
if {[info exists uData($Acct翻譯社rname)]} {


Tcl/Tk 劇本起頭運行時,存在幾個整體變數(如果在當前環境中為非空,則是預先界說的)。這些變數許可以下對功課系統進行會見:argc 是對腳本引數的計數,而不是對換用的名稱進行計數。 argv 是引數的列表(不是陣列)。argv0 是調用的檔案名(可所以符號鏈結)。env 是根據當前外殼的情況變數名成立下標的陣列翻譯errorCode 存儲有關最近的 Tcl 錯誤資訊,errorInfo 包括對這統一個毛病事宜的堆疊跟蹤。該列表還有另外 12 tcl_xxx 變數,從 tcl_interactive tcl_version翻譯可以在 Tcl/Tk in a Nutshell 中找到好的總結,(有關更多資訊,請參閱本教程末尾的參考資料)。


% eof $Chan
#


\b
退格
set Optimize 0

set Days 7
% set d [exec date]
}
Tcl
陣列


Tcl
中的迴圈號令是 whilefor foreach。前提(轉移)命令是 if/then/else/elsif switch翻譯上述命令的限定語句是 breakcontinuereturn error。最後,catch 敕令供給了毛病處置懲罰能力翻譯
\space ("\ ")
空格
set uData($Acct,rname) $rName
set N [expr $N + 1]
puts stdout [UserAdd bpb Brian bilbrey@junk.com 555-1212]

puts stdout {Hello翻譯社 World!}

Tcl
運算符和數學函數
file3
TCL
語言(九)
the circumference is 18.8495559215.
Name(j,k,l...)
多維陣列
Name
變數(辨別大小寫)

其他曆程饬令有 exit(終止正在運行的 Tcl 腳本)和 pid(返回當前或指定進程的 PID),對於出於各類目標的情形,這異常便當翻譯Tcl 不合併任何本機進程節制命令,但可以將 exec 號令與 PID 資料一路利用來實現很多工翻譯


# Demonstrate procedures and

% file exists hello3.tcl

12
% set People(boss) Jack

\xddd...
十六進位值

./hello3.tcl on X Display :0.0
-v* {set Verbose 1}
~/tcltk$ cat hello.tcl
******
exec
號令用於顯式地履行外部敕令。在 Linux 下,當 Tcl 處於對話模式時,可以直接運行大大都外部命令,如左側示例所示翻譯 exec 運行時,會將程式的 stdout 輸出返回到 Tcl,而不是返回到螢幕,這許可將資料賦值給變數翻譯當程式在後臺啟動時,立刻返回的值是程式的 PIDexec 程式可以充裕操縱 UNIX 環境中的 I/O 重定向和管道。
set X [lindex $argv 0]
% close $Chan
%
% set Person $People(friend)
}
Hello翻譯社 World! \a

puts stdout [UserAdd tom Tom tom@junk.com 555-1212]
set Area [expr $PI*$Rad*$Rad]
Hello翻譯社 World!
incr $j
% file join /$dir1 dir2 dir3
% set d [date]
global PI
{Bob Carol} Richard {Ted Alice}
\f
換頁
global PI
% set c1 {Bob Carol}

1

puts stdout "Needs X, Y, and Radius"
%

# Demonstrate global variables
#
所利用的 rename 敕令正如它的字面含義一樣,為現有號令或進程供應新名稱。使用 rename 有兩個顯著的緣由。第一個緣由是,經由過程重定名原有過程,然後用溝通名稱的進程替代它,來給現有饬令添加功能翻譯過程可以挪用原進程,需要時可以添加一些需要的功能。使用 rename 的第二個緣由是,映照一個不存在的饬令,例如,象 rename exec {}; 一樣,可以避免用戶執行外部號令。
1: ring



}
llength $List —
返回頂級項的計數結果翻譯
list
敕令接受它的所有引數並將它們返回在一個列表情況中。引數可所以值或變數。在左側這個示例中,可以手工建立列表,或可將其他列表視作引數來利用列表(從而留存第一個“Party”的兩對偏向)。或,concat 命令用於將兩個或多個列表合併到頂級項的單個實體,返回第二個更有趣的“Party”
-o* {set Optimize 1}
}
}
upvar
敕令供給將局部變數與另外一個感化域中變數的值相幹聯的設施。這答應按照名稱將變數挪用進進程,這對於當進程需要可以點竄在另外一個感化域的值而不單單使用它時,就顯得非常方便。這個命令語法是 upvar level $VarName LocalVar ,其中 level 是到當前作用域以外的步調數。“#0”表示全局作用域這一層。

}
1 + 2
4 + 5
7 - 9

}
set Result [eval $Operation]
% set Person $People(friend)
% string toupper $Phrase
\ char
反斜杠替換
Tcl
支援一組標準的運算符和數學函數翻譯這些運算符包括算術、位元和邏輯運算符,可以經由過程 expr 命令利用常規的運算符優先順序規則進行求值翻譯另外,斟酌到 Tcl 的本色是面向字串的劇本語言,所以對一些數學函數進行了公道的增補:
Bob Carol


Tcl/Tk
是一種诠釋型情況。可以經由過程添加預編譯的 C 函數來擴大 Tcl 註釋器,可從 Tcl 情況內部挪用 Tcl 诠釋器翻譯可以為特定目標或一般的和廣泛利用的而定制這些擴大翻譯華頓翻譯公司們將在教程的後面看一些擴大並側重看一下第一個擴大特別很是流行的 Expect
return [expr $rad * $rad * $PI]

% set dir1 home
******
set PI [expr 2 * asin(1.0)]
Tcl
是一種很通用的腳本說話,它幾近在所有的平臺上都可以註釋運行,功能壯大翻譯tool command language的縮寫,發音為 "tickle” 現實上包括了兩個部分:一個說話和一個庫翻譯


檔資訊和操作(再提示您一次,所有都是以 file 最先)是經由過程 atimeattributescopydeletelstatmkdirmtimereadlinkrenamerootnamesizestat type 來完成。請注意,在 Windows Mac 環境中運行一些檔資訊命令時,可能會返回不決義的資料,因為例如在那些檔系統中沒有表示索引節點和符號(和硬)鏈結資料。
Tcl
進程
1

NICE DAY翻譯社 EH?
set Cir [expr 2*$PI*$Rad]
The answer to everything is 42!
hello, world!
路徑和檔



*********

Remove_Vowels $Line $Optimize $Verbose



Tcl
列表
三角函數包孕 cos(x)acos(x)cosh(x)sin(x)asin(x)sinh(x)tan(x)atan(x)atan2(y, x)tanh(x) hypot(x翻譯社 y)翻譯與這些函數相幹的單元是弧度。
TCL
說話(二)
% string match ello $Phrase
%
雖然該樣本演示了相對瑣細的 eval 運用程式,但從概念上講,可以根據已知語法的輸入檔的輸入,很容易地將它擴展為動態檔和/或目次處置,或擴大為對檔類型、許可權、訪問時候或任何種類的可測試元素的根基操作。Name(idx) 陣列變數
# Demonstrate Data Structures
其他可能的資料佈局包孕陣列列表、已鏈結或兩重鏈結的陣列或其中的各類分列。因為 Tcl 8.0 所具有的列表重實現供應了不變的訪問次數,所以陣列列表構造相當有用翻譯
-------
TCL
說話(四)
Area of circle of radius 3 is 28.2743338823翻譯社

lindex $List n —
返回已創設下標的項,從 0 開始計數。
set Verbose 0
} else {
return LineCount


0
set uData($Acct,email) $eMail
proc c_area {
# global scoping briefly
% file pathtype ./hello3.tcl
Address: 192.168.1.3#53
}
set Y [lindex $argv 1]
\
字元 替換



return [expr 2.0 * $rad * $PI]
Name: orbdesigns.com
set LineCount 0
if {$argc == 3} {
puts stdout "Area of circle ofradius $rad is [c_area $rad], the circumference is[circum $rad]. "


14

% set Phrase "hello, world!"
" string " 帶替代的援用


Ted Alice
除簡單的多維陣列之外,通常建議用已專門用於過程介面的陣列來實現 Tcl 資料構造。從結構的使用者角度來看,雖然這種設計埋沒了具體實現細節,但供應了執行主要的錯誤檢查能力翻譯
puts stdout {Hello, World! \a}
其他一些有效的列表號令及其語法是:
puts stdout "Wrong argument count!"
set PI [expr 2 * asin(1.0)]
% puts stdout $d

#
變數感化域劃定規矩

更多 Tcl 陣列
puts stdout "$N: $Arg "
puts stdout "$Op = $Result "

#
% string length $Phrase

puts stdout {Hello, World! \a}
TCL
說話(六)
~/tcltk$ ./hello2.tcl

tcltk
}
Tcl tick
的組成
% array get People


\ddd
八進制值

元字元是在 Tcl/Tk 情況的上下文中有非凡含義的字元或字元對,它們包孕分組語句、封裝字串、終止語句以及其他,以下表所示。左邊列出的代碼中演示了一些元字元。要注意的一個特別特征是,當利用花括弧(避免替換和擴大)取代雙引號時,輸出中的差別。
~/tcltk$ tclsh

[ string ]
敕令替代
array
敕令是一種多用處工具,很象 stringarray exists 饬令用於測試變數是不是作為陣列存在,array get 用於將陣列轉換成列表格局,array set 用於將列表轉換為陣列,array names 用於返回下標列表,array size 用於返回對下標進行計數的效果翻譯搜刮全部陣列有它本身的一組四個命令:array startseacharray anymorearray nextelement array donesearch
Tcl 中執行 indexlastfirstwordend wordstart 號令可以實現下標功能。字串點竄是由 tolowertouppertotitletrimtrimlefttrimrightreplace map 來處置懲罰的。後者需要預先界說一個字元對應表。用 range 抽取子字串,用 repeat 多次輸出字串翻譯
Two
這些陣列鍵現實上別離只是字串“1,10”“1,11”,但對接見資料來講,誰知道這之間的差別?
在左邊的樣本代碼中,利用了其中幾個變數和(又一次)利用了一些反斜杠引用的字元( \a)。 \ char 許可替代非列印 ASCII 字元。這對於 UNIX 下的很多劇本語言和外殼環境都是常見的。如表中申明的那樣,對於沒有界說替代的反斜杠援用的字元只被簡單地回送到輸出。
puts stdout "Sorry, Dave... "
Hello, World!
# math functions


lrange $List i j —
返回列表元素的局限。

% set People(spouse) Marcia
puts stdout "Area = $Area"
# metacharacter usage

incr LineCount

\a
響鈴
可使用 append 敕令,將文本添加到現有變數中。通過利用與 C 語言的 printf 敕令相同的樣式和商定,format 本篇文章引用自此: http://blog.xuite.net/joy613/wow/6207051-TCL%E8%AA%9E%E8%A8%80有關各國語文翻譯公證的問題歡迎諮詢華頓翻譯公司02-77260932

arrow
arrow
    文章標籤
    翻譯社
    全站熱搜

    samantea3fvn0 發表在 痞客邦 留言(0) 人氣()