腳本語言<一>TCL

2021-03-02 數字後端設計及CAD流程

    tcl是每個人都必備的技能,不僅僅指工具自帶的tcl命令,拋開工具本身的tcl用法更應該熟練的使用。既然是必備的技能,每個人都很熟練,我這裡就撿一點重要的講講,供大家參考參考(重要性不分先後)。

info script 經常我們需要source某個文件的同時又想source這個文件所在目錄下的其他文件,通過info script,我們可以得到這個腳本所在的目錄(返回相對路徑),經常和file命令一起用返回絕對路徑。

info exist var 判斷某個變量是否存在,例如

    set a "hello"; info exist a; 注意這裡不需要加$符號 

 

rename old_name new_name,可能有些情況下需要改變原來命令的名字,例如:

    rename getEcoMode abc; abc 

time {commands} 用來衡量某個命令消耗的時間。例如:

    time {dbGet top.insts}

雖然命令消耗的時間短,但是如果有很多次循環,所消耗的時間就很可觀了。可以通過這個tcl命令來篩選出實現同一個目的消耗時間最短的命令

exec linux_command  執行linux的命令,例如:

    exec touch aa

eval $var  動態構造命令,比如說一個變量中套另一個變量等,例如

    set a "hello world"

    #set a "noodle" 

    set b "puts \"want to say $a\""

    #set b "puts \"want to eat  $a\""

    eval $b

通過改變變量a,或者改變變量b,實現了動態的命令。

file [option] $var  option有很多,想要知道有哪些option, 有兩種方法,一,man: man file;二,使用錯誤的option,例如 file a

    file dirname  /a/b/c

    file tail /a/b/c

    file normalize ./

同perl/C等語言一樣,tcl也有模塊:

    package require $package 

通過auto_path這個變量來得到模塊所在的路徑,這是個很有用的變量,經常我用這個變量來獲得工具所在的路徑

    echo $auto_path 

我們在起變量名字的時候,很可能重複。一般通過局部變量或全局變量來區分這些變量,但是有時候這個還不夠,可以採用名字空間來區分不同變量,下面舉個簡單的例子:

namespace eval xx{}

set xx::a "hello"

set ::a     "asia"

echo $::a

echo $a

echo $xx::a

namespace delete xx

regexp [option] $pattern $string [new_var]

這裡的option包括:

-nocase : 忽略大小寫

-inline :返回匹配的內容而不是1/0

-all :匹配所有的內容,而不是匹配一次就停止

-linestop: 匹配多行,

inline的用法和[new_var]的用法類似,大家可以仔細體會下下面的例子:

set a "abcdefghijkl"

regexp "(b.*h).*(jk)" $a x y z 可以看看x/y/z的結果:x是所有的內容,y是第一個括號內容,z是第二個括號內容

regexp -inline "(b.*h).*(jk)" $a  

all:

set a "a b c b d e b"

regexp -all "b" $a

linestop: 這個一般和-all -inline一起使用

例如下面的例子:

set a "

    aisb

    b

    cisd

"

regexp -all -inline ".*is.* "$a

regexp -all -linestop ".*is.*" $a

regsub和regexp類似,只是不只是查找,還返回替換後的值

經常比較混淆的東西是list和string,同一個東西,既可以當做list,也可以當做string,為了區分,我就簡單的區別一下:

    任何字符串都可以當成string

    任何有空格的字符串都可以當成list

當做list用和當做string用的命令不同,其中最容易混淆的是append (用於string)和lappend(用於list)命令,可以仔細體會一下下面的例子:

set a "this is hello"

lappend a "world"

append  a "world"

注意這裡的a都沒有$符號

concat $lista listb 多個list合併

lindex $list $index 返回第$index個數

llength $list   list中元素的個數,以空格區分每個元素

lsort [option] $list

lsort -unique $list  將list中重複元素刪除

其他的list命令就不一一解釋了:

lrange/linsert/lreplace/...

string相關的命令,也不詳細解釋了:

string compare

string tolower

string toupper

string trimleft

catch { command }一個用於debug的命令,經常被我用作其他用途:通常如果一個命令產生error,而我們又想繼續下去,用catch,就可以繼續執行下面的命令

TCL有很多自帶的函數,採用expr命令進行計算

expr abs(-3)   取絕對值

expr int(3.13)取整,返回的是整數

expr ceil(3.13)   返回3.0,和int類似,不同的是返回的是浮點數

expr floor(3.13)   返回4.0,

expr round(3.13) 四捨五入取值

expr rand()          取0-1隨機數

expr fmod(9,2)    取餘數

在計算的時候通常會碰到兩個問題:

整數和浮點數:

expr 122/12    由於分子分母都是整數,所以返回的也是整數

expr 122/(12*1.0) 分母變成了浮點數,返回的也是浮點數

二進位和十進位:

expr int(3.9999999999999) 期待結果是3,但實際上返回4,這就是二進位和十進位在小數轉換過程中的精度損失造成的錯誤

主要用於參數傳遞,C語言中的參數有傳值調用和引用調用,同樣TCL的參數也有這種功能,這就是upvar命令。下面舉兩個例子可以仔細體會一下傳值和引用結果和用法的區別

1. 普通傳值調用

set f 12

proc tmp_incr { var } { incr var}

tmp_incr $f

2. 引用調用

set f 12

proc tmp_incr { var } {upvar $var t ; incr t}

tmp_incr f

將list中的元素付給變量,例如:

set a "aa bb cc"

lassign $a x y z 直接賦值給x,y,z

array [option] array_name

數組有兩種創建方法:

    array a {x jim y tom}

    或者:

    set a(x) jim

    set a(y) tom

通常array和普通的變量可能會用一個字符表示,所以用之前需要unset:

    unset  a

    array unset a

option包括:names,get等,同樣可以通過故意敲錯option來獲得提示

    array names a 返回key+value

    array get a  返回key

數組只有一維的,可以通過特殊分隔符來模擬多維數組:

    set a(x,y) valuea

    set a(y,z) valueb

    set a(x)(y) valuea

    set a(y)(z) valueb

用於debug腳本,雖然很有用,但是我沒用過,略

為了顯示漂亮或取指定的位數等可以用format

set long_a 12.345

set short_a [format %1.2f $long_a]

set string_a "abcde"

puts "[format %-20s $string_a]"這裡的-號表示左對齊

if/else/switch/continue/return/文件件讀寫操作

略(這個字戳中了多少人的心。哈哈)

新的一年,有什麼新的期待,新的願望,在評論裡面寫寫吧,看看年底有沒有實現。

相關焦點

  • Tcl/Tk與APDL聯合編程實現ANSYS的二次開發
    APDL(ANSYS Parametric Design Language)大家都熟悉,ANSYS參數化設計語言,及俗稱的命令流。它由類似於FORTRAN的語言部分和1000多條ANSYS命令組成。APDL是一種解釋性文本語言,有順序、選擇、循環及宏等結構。
  • command.tcl文件在HyperMesh二次開發中的使用
    文件中的這些命令可用於創建新的命令腳本,以執行自動化或恢復以前執行的操作。關於Command Files的使用  新腳本錄製步驟如下:打開新的HM,Edit -> Command File,打開command.tcl;清空command.tcl中的內容並關閉或者直接刪除command.tcl文件;開始在HM進行操作,即錄製腳本;操作結束後,Edit ->
  • 什麼是腳本語言,你用過哪些腳本語言
    早期的腳本語言經常被稱為批處理語言或工作控制語言。一個腳本通常是解釋運行而非編譯。雖然許多腳本語言都超越了計算機簡單任務自動化的領域,成熟到可以編寫精巧的程序,但仍然還是被稱為腳本。幾乎所有計算機系統的各個層次都有一種腳本語言。包括作業系統層,如計算機遊戲,網絡應用程式,文字處理文檔,網絡軟體等。在許多方面,高級程式語言和腳本語言之間互相交叉,二者之間沒有明確的界限。
  • TCL培訓教程(一)
    本文詳細介紹了TCL的各個方面, 特別對利用C\C++語言擴展TCL命令作了詳細論述. 本文附有大量實例.縮略語清單: TCL Tool Command Language 一種腳本語言參考資料清單名稱作者編號發布日期查閱地點或渠道出版單位Tcl and Tk ToolKitJohn K.
  • 舊文|什麼是「腳本語言」
    但表現形式就是更大程度上體現的是設計思想,而「腳本語言」的一般指導思想就是為了簡化程式設計師工作,讓程式設計師能夠寫出更為簡單易用的代碼,而不必按照非常嚴格的特殊規範來找一屁股的麻煩從而完成一個本來看似簡單的事情。相反,某些「非腳本語言」因為考慮太過複雜臃腫,結果反而會被冷落一旁,這樣的例子,不舉也罷。
  • CodeWarrior IDE使用Tips之Qorivva MPC56xx新建應用工程選項、調試高級選項及下載過程控腳本詳解
    Tips:用戶也可以在其中增加自己的全局條件編譯或者C語言宏定義,作用域為應用工程中的所有C源文件和頭文件。,默認為:${ProjDirPath}/Project_Settings/Debugger/MPC5604B_VLE.tcl,用戶可在此指定其他的腳本文件,以實現個性化的下載過程控制。
  • 極刊・Tcl/Tk - From Novice to Expert
    Tcl/Tk 我會挑選書單中的一本書作為教材,這本講完後會繼續挑選另一本來講,已經選好了,到時候繼續該系列的更新。在網上看到很多以基礎知識或者以實踐為主的 Tcl/Tk 教程,做為學習材料都是可以的,一向提倡認準了一條路走下去,而不是在選擇學習素材上大費周章,把學習的熱情提早消耗完。
  • 基於Python腳本的R語言的函數
    本文介紹了採用創建一個Python腳本,用該腳本模仿R風格的函數的方法來方便地進行統計。 是用R語言還是用Python語言?這是一個曠日持久的爭論。在此,我們可以嘗試採用折中路線:創建一個Python腳本,用該腳本模仿R風格的函數,來方便地進行統計!
  • tcl空調怎麼樣tcl空調與奧克斯哪個好
    天氣越來越炎熱,空調的使用率變得越高了,而且空調的品牌有很多,在市場上還是有很多品牌的競爭的,那麼tcl空調怎麼樣呢?tcl空調有多少人使用過,tcl空調與奧克斯哪個好呢?tcl空調價格大家聽說過的tcl品牌應該都知道是出產的電視品牌比較多,對於tcl品牌的空調應該不太了解,那麼tcl空調怎麼樣呢?TCL空調是TCL集團股份有限公司四大支柱產業之一,該事業部成立於,現已具備生產各式家用空調、商用空調、中央空調、移動空調和除溼機以及空調壓縮機的能力,形成綜合性專業空調產業群。
  • 【分享】分享一款tcl/tk開發中的小工具
    在這個空檔時間,分享一個自編的,用於平常hyperworks二次開發或tcl/tk甚至python、js開發都能用上的一個小工具。這個小工具我把它叫做:Visual Tk Tools,包含如下幾個功能點:
  • 將PHP作為Shell腳本語言使用
    但是只有很少數的人意識到PHP也可以很好的作為編寫Shell腳本的語言,當PHP作為編寫Shell腳本的語言時,他並沒有Perl或者Bash那麼強大,但是他卻有著很好的優勢,特別是對於我這種熟悉PHP但是不怎麼熟悉Perl的人。
  • tcl電視機怎麼樣 tcl電視機報價及性能【詳解】
    隨著時代和科技的發展,現在國產電視機品牌也日益發展起來了,其中tcl電視機近些年來廣告打得很兇,在一些購物網站上tcl電視機的銷量也名列前茅,導致越來越多的消費者想要了解tcl電視機。tcl電視機怎麼樣?tcl電視機圖片及報價等等知識,下面小編為大家一一介紹。  tcl電視機圖片:
  • 一次使用 Go 語言編寫腳本的經歷
    本文介紹了我如何嘗試使用 Go 語言進行腳本編程的經歷。文中我將討論 Go 腳本的必要性,我們預期的表現以及可能的實現方式。在討論過程中,我講深入探討腳本、Shell 和 Shebang。最終,我們將會討論讓 Go 腳本工作的解決方案。為什麼 Go 語言適合編寫腳本?
  • 利用Python進行遊戲腳本編程,不愧是最強的腳本語言!
    使用已有的腳本語言可以節省開發新型自定義語言的時間和開銷,並且這些語言通常要比自己創造的語言更加的強大。當然小編這裡有一份Python學習資料,加小編QQ群:696541369即可免費領取!下來就談一談我們在 Humongous 娛樂公司將 Python 集成進新遊戲引擎的一些經驗。說明我們選擇 Python 的原因、獲得的收益、遇到的問題,以及我們是怎樣解決它們的。為什麼要使用腳本語言C++ 是一種強大的語言,並且是 C 語言的巨大改進,但它並不是完成所有任務的最佳選擇。
  • tcl電視怎麼樣 tcl液晶電視特點【圖文詳解】
    一說起 液晶電視 ,相信隨便一個人就能說出好多大品牌,但是TCL這個老牌生產電視的廠家一定是大部分人心中的NO.1。不過現在許多正打算選購液晶電視的朋友對tcl還不甚了解,那麼究竟tcl液晶電視怎麼樣呢?下面就讓我來給大家介紹一下吧!
  • tcl電冰箱怎麼樣 tcl電冰箱新品介紹
    今天我們就來看一下 tcl電冰箱怎麼樣,tcl電冰箱新品介紹。   製冰機用以結冰的櫃或箱;帶有製冷裝置的儲藏箱。 家用電冰箱的容積通常為20~500升。
  • tcl液晶電視怎麼樣 tcl液晶電視詳細介紹【圖文】
    那麼, tcl 液晶電視 怎麼樣 呢?下面小編將從TCL企業與液晶電視特點方面為您介紹。   一、tcl液晶電視怎麼樣-從企業看  tcl集團創辦與二十世紀八十年代初期,原是一家從事 家電 生產的小型國有企業。
  • tcl電視機多少錢 tcl電視機報價大全【圖文詳解】
    tcl是目前國內做的比較好的電視機品牌,受到不少用戶的關注。那麼,tcl電視機的價格是多少?下面小編為你介紹一些電視機報價。這是tcl電視機專 門 設計研發的圖像處理引擎技術,它能夠針對大屏幕的液晶電視面板進行圖像處理,來滿足電視機高的解析度,為你能夠帶來細膩的畫質,高清的畫面,逼真的色彩,滿足消費者對液晶畫面的完美視聽要求。  2、極速亮彩。
  • tcl兩門冰箱怎樣 tcl兩門冰箱分析介紹【詳解】
    tcl兩門冰箱是非常不錯的一款冰箱品牌,tcl的產品質量是非常值得信賴的,所以今天小編為了幫助大家更好的了解和使用tcl兩門冰箱,小編來為大家詳細的介紹下tcl兩門冰箱的一些情況,也可以更好地方便大家購買使用。