TCL編程
⑴ TCL的語言簡介
TCL (最早稱為「工具命令語言」Tool Command Language, 但是已經不是這個含義,不過我們仍然稱呼它為TCL)是一種 腳本語言。 由John Ousterhout創建。 TCL很好學,功能很強大。TCL經常被用於 快速原型開發,腳本編程, GUI和測試等方面。TCL念作「踢叩」 tickle. Tcl的特性包括:
* 任何東西都是一條命令,包括語法結構(for, if等)。
* 任何事物都可以重新定義和重載。
* 所有的數據類型都可以看作字元串。
* 語法規則相當簡單
* 提供事件驅動給Socket和文件。基於時間或者用戶定義的事件也可以。
* 動態的域定義。
* 很容易用C, C++,或者Java擴展。
* 解釋語言,代碼能夠動態的改變。
* 完全的Unicode支持。
* 平台無關。Win32, UNIX, Mac上都可以跑。
* 和Windows的GUI緊密集成。 Tk
* 代碼緊湊,易於維護。
TCL本身不提供面向對象的支持。但是語言本身很容易擴展到支持面向對象。許多c語言擴展都提供面向對象能力,包括XOTcl, Incr Tcl等。另外SNIT擴展本身就是用TCL寫的。
⑵ tcl/tk 這種編程語言過時嗎
tk 對我來說最大用處是:
有時寫個 python cli ,運行時間比較長,一般扔進後台開始運行就不理會了
運行完畢想簡單彈個 GUI 通知結束,這時不想還用什麼大型的 GUI 來寫, tk 幾行就行了。
⑶ TCL編程的語法規則
TCL的語法規則:
1、解釋器
在Tcl的數據結構中的核心是Tcl_Interp.一個解釋器包含了一套命令,一組變數和一些用於描述狀態的東西。每一個 Tcl命令是 在特定的Tcl_Interp中運行的,基於Tcl的應用程序可以同時擁有幾個Tcl_Interp。Tcl_Interp是一個輕量級的結構,可以快速的新建和刪除。
2、數據類型
Tcl只支持一種數據結構:字元串(string)。所有的命令,命令的所有的參數,命令的結果,所有的變數都是字元串。請牢記這一點,所有的東西都是字元串。這是它比較有特點的方面字元串有三種形式:命令(command),表達式(expresion)和表(list)。
3、Basic Command Syntax 基本語法
Tcl有類似於shell和lisp的語法,當然也有許多的不同。一 條Tcl的命令串包含了一條或多條命令用換行符或分號來隔開,而每一條命令包含了一個域(field)的集合,域使用空白分開的,第一個域是一個命令的名字,其它的是作為參數來傳給它。
例如:
set a 22 //相當於C中的 a=22 a是一個變數這條命令分為三個域:1:set 2:a 3:22 set使用於設置變數的值的命令,a、20 作為參數來傳給它,a使它要操作的變數名,22是要付給的a值。
Tcl的命令名可以是內置的命令也可以是用戶建的新命令,如果是用戶用戶建的新命令應用程序中用函數Tcl_CreateCommand來創建。所有的參數作為字元串來傳遞,命令自己會按其所需來解釋的參數的。命令的名字必須被打全,但 Tcl解釋器找不到一同名的命令時會用 unknown命令來代替。
在很多場合下,unknown 會在庫目錄中搜尋,找到一個的話,會自動生成一個Tcl命令並調用它。unknown經常完成縮略的命令名的執行。但最好不要使用。
4、注釋
和shell很象,第一個字母是"#"的Tcl字元串是注釋。
其他細節規則
Grouping arguments with double-quotes 用雙引號來集群參數,目的在於使用有空白的參數。
例如:
set a "this string contains whitespace"
如果一個參數一雙引號來開始,該參數會一直到下一個雙引號才結束。其中可以有換行符和分號。
Variable substitution with $ 用美元符進行變數替換說白了就是引用該變數。
例如:
set a hello
set b $a // b = "hello" 實際上傳給set命令的參數
//是b,"hello"
set c a // b = "a"
Command substitution with brackets 命令子替換(用方括弧)
例如:
set a [set b "hello"]
實現執行 set b "hello" 並用其結果來替換源命令 中的方括弧部分,產生一條新命令
set a "hello" //"hello" 為 set b "hello" 的返回值
最終的結果是b="hello" a="hello"
當命令的一個子域以方括弧開始以方括弧結束,表示要進行一個命令子替換。並執行該子命令,用其結果來替換原命令中的方括弧部分。方括弧中的部分都被視為Tcl命令。
如下一個復雜一點的例子:
set a xyz[set b "abc"].[set c "def"]
//return xyzabcdef
Backslash substitution 轉移符替換
轉移符時間不可列印字元或由它數意義的字元插入進來。這一概念與C語言中的一樣。
Backspace (0x8).
f Form feed (0xc).
Newline (0xa).
Carriage-return (0xd).
Tab (0x9).
v Vertical tab (0xb).
{ Left brace (`{").
} Right brace (`}").
[ Open bracket (`[").
] Close bracket (`]").
$ Dollar sign (`$").
sp Space (` "): does not terminate argument.
; Semicolon: does not terminate command.
" Double-quote.
Grouping arguments with braces 用花擴括弧來集群參數
用花擴括弧來集群參數與用雙引號來集群參數的區別在於:用花擴括弧來集群參數其中的三種上述的子替換不被執行。而且可以嵌套。
例如:
set a {xyz a {b c d}}//set收到兩個參數 a "xyz a {b c d}"
eval {
set a 22
set b 33
}//eval收到一個參數 "set a 22
set b 33"
5、命令綜述
1.一個命令就是一個字元串(string)。
2.命令是用換行符或分號來分隔的。
3.一個命令由許多的域組成。第一個於是命令名,其它的域作為參數來傳遞。
4.域通常是有空白(Tab橫向製表健 Space空格)來分開的。
5.雙引號可以使一個參數包括換行符或分號。三種子替換仍然發生。
6.花括弧類似於雙引號,只是不進行三總體換。
7.系統只進行一層子替換,機制替換的結果不會再去做子替換。而且子替換可以在任何一個域進行。
8.如果第一個非控字元是`#",這一行的所有東西都是注釋。
6、表達式
對字元串的一種解釋是表達式。幾個命令將其參數按表達式處理,如:expr、for 和 if,並調用Tcl表達式處理器(Tcl_ExprLong,Tcl_ExprBoolean等)來處理它們。其中的運算符與C語言的很相似。
!
邏輯非
* / % + -
<< >>
左移 右移 只能用於整數。
< > <= >= == !=
邏輯比較
& ^ |
位運算和 異或 或
&&''
邏輯"和" "或"
x y : z
If-then-else 與C的一樣
Tcl 中的邏輯真為1,邏輯假為0。
一些例子:
5./ 4.0
5./ ( [string length "abcd"] + 0.0 )
計算字元串的長度 轉化為浮點數來計算
"0x03" > "2"
"0y" < "0x12"
都返回 1
set a 1
expr $a+2
expr 1+2
都返回 3
⑷ tcl編程語言畫圖學習,從入門到學成到該多久(或者多少學時)
有c語言基礎,掌握繪圖函數大約需要一個月時間。
⑸ TCL編程代碼太長,如何換行
回車可以換行。如果需要將兩行連接成一行的話,可以用\將兩行連接成一行。
⑹ PLC程序可以用TCL語言編寫嗎
我也是用UG編程的,UG後處理的確比較深奧,需要一定的功底,而且這個東西事關重大,不能出一點點錯,所以幾乎每個公司都有通過各種渠道得來的非常成熟的後處理,不需要我們編程的去做後處理文件。
你所說的就是自己做.tcl和.pui兩個文件,我不會做,但我知道有這兩個文件了應該怎麼辦。一般做編程的知道這就夠了。
⑺ 有關Tcl腳本語言編程的問題
set srcfile myres.res
set dstfile dtest.txt
if {[catch {open $srcfile r} res]} {
puts "Failed to open the source file: $srcfile; $res"
return 0
}
set hSrc $res
if {[catch {open $dstfile w+} res]} {
puts "Failed to open the destination file: $dstfile; $res"
return 0
}
set hDst $res
foreach line [split [read $hSrc] \n] {
if {[regexp {rdly=(.*)targ=(.*)trig=(.*)} $line match sub1]} {
puts $hDst "Rise Delay is $sub1"
}
if {[regexp {fdly=(.*)targ=(.*)trig=(.*)} $line match sub1]} {
puts $hDst "Fall Delay is $sub1"
}
}
close $hSrc
close $hDst
⑻ 如何寫tcl腳本謝謝
比如說設置一個變數,同時給其賦值:
set
var1
10
tcl腳本中的注釋,如果在行首,使用#注釋內容;
如果在行尾,使用;#注釋內容
列印字元串在屏幕上,使用
puts
"要輸出的內容"
還有對文件的操作,字元串的操作等,你最好下載一個tcl教程,如果有一些編程基礎,看看差不多就行了,很簡單的。
⑼ 在Tcl語言編程中怎麼定義一個全局變數
使用兩個冒號來定義的
比如set ::a 1
⑽ TCL語言的具體例子
下面是TCL程序的例子:
#!/bin/sh
# next line restarts using tclsh in path
exec tclsh ${1+$@}
# echo server that can handle multiple
# simultaneous connections.
proc newConnection { sock addr port } {
# client connections will be handled in
# line-buffered, non-blocking mode
fconfigure $sock -blocking no -buffering line
# call handleData whensocketis readable
fileevent $sock readable [ list handleData $sock ]
}
proc handleData {
puts $sock [ gets $sock ]
if { [ eof $sock ] } {
close $sock
}
}
# handle all connections to port given
# as argument when server was invoked
# by calling newConnection
set port [ lindex $argv 0 ]
socket-server newConnection $port
# enter the event loop by waiting
# on a mmy variable that is otherwise
# unused.
vwait forever
另外一個TK的例子 (來自 A simple A/D clock) 它使用了定時器時間,3行就顯示了一個時鍾。
proc every {msbody} {eval $body; after $ms [info level 0]}
pack [label .clock -textvar time]
every 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]} ;# RS
解釋:第一行定義了過程every, 每隔ms毫秒,就重新執行body代碼。第二行創建了標簽起內容由time變數決定。第3行中設置定時器,time變數從當前時間中每秒更新一次。
Tcl被廣泛的用做script語言,大多數情況下,Tcl和Tk(「Tool Kit」)庫同時使用,Tk是一系列令Tcl易於編寫圖形用戶介面的命令和過程
Tcl的一個重要特性是它的擴展性。如果一個程序需要使用某些標准Tcl沒有提供的功能,可以使用c語言創造一些新的Tcl命令,並很容易的融合進去。正是由於Tcl易於擴展,很多人為它編寫了擴展包,並在網上共享。
Tcl和其他編程語言例如c不同,它是一種解釋語言而非編譯語言。Tcl程序由一系列Tcl命令組成,在運行時由Tcl解釋器解釋運行。解釋運行的一個優點是它可以自己為自己生成Tcl script。