tcl基礎知識


寫於2021-12-03 19:08

該文章最初的目的只是為了記錄我個人的學習筆記,所以有些地方可能寫得不是很清楚,請大家見諒!
有問題或者有補充的地方可在評論區留言!!!

tcl解釋器官方下載地址: https://www.activestate.com/products/tcl/

第一章 Tcl基礎知識

總結: 在tcl中,一切皆字符串

變量命名規則:沒有任何限制,分區大小寫

Tcl對命令的求值過程:解析執行
解析:把命令拆分為一個個獨立的單詞,同時進行必要的置換。
執行:把第一個單詞作為命令,其余單詞作為參數,並檢查是否滿足該命令要求,不滿足要求將錯誤信息保存在全局變量errorInfo中。

Tcl命令構成:命令名 參數1 參數2 ... 參數N
Tcl三類置換:變量置換命令置換反斜線置換
Tcl注釋方法:if,花括號proc#

  1. 在采用分號作為命令之間的分隔符時,分號左側命令不會顯示輸出結果(set a 6;set b 9 只會顯示9);
  2. incr命令后的兩個參數都必須是整型數據;
  3. $varset var等效;
  4. 在同時使用雙引號和花括號時,最外層的起主導作用;
  5. Tcl會把"-"、"."當作分隔符,所以變量名有"-"時,變量置換通過"{}"括起來({a-b-c});
  6. \可實現續行功能,“\”后不能跟隨任何字符,包括空格和制表符。
命令 功能
info exists 判斷變量是否存在
info hostname 返回主機名
info tclversion 返回tcl解釋器版本信息
unset 取消變量定義並釋放內存空間

第二章 表達式

總結:

算術操作符

  1. 對於a/ba%b,結果滿足a=q*b+r,且0 ≤ |r| < |b|,r與q同符號。

Tcl常用函數

  1. abs(x)fmod(x,y)(x除以y的余數)、max(x)min(x)pow(x,y)sqrt(x)round(x)(對x進行四舍五入得到的整型值)、rand()(產生在[0,1]區間的偽隨機浮點數)srand(x)(使用整數種子x重設隨機數生成器)ceil(x)(向上取整)、floor(x)(向下取整);
  2. bool(x)double(x)int(x)
  3. 真:非0yesontrue;假:0noofffalse;
  4. 字符串是否相等比較:eqne

第三章 字符串

總結:

  1. 可以使用 end±i 作為字符串中最后一個字符的索引值的命令(end±i中間不允許出現空格):string indexstring rangestring replacelindexlrange

  2. 直接原地修改變量的命令(看對變量操作時是否有用“$”符號):appendlappendlset、;

  3. string repeat可以指定字符串的重復次數

string repeat a 5
=>aaaaa
  1. append直接修改原始變量的值,沒有新創建變量,例:
set str hello
set v tcl
apped str $v
puts $str
=>hello tcl
  1. string compare(非判斷兩字符串是否嚴格相等)、string equaleq==進行兩個字符串比較,區分大小寫,如果不區分,需要添加-nocase參數,-length i限定只對前i個字符進行判斷,例:string equal -length 3 hello Hello
命令 功能
string repeat 把指定字符串重復指定次數 string repeat a 5
string is 判定字符串是否為指定類型 string is ascii 32
string length 可獲取字符串中字符的個數
string index 根據索引值獲取字符 string index $str end-1
string range 根據索引區間獲取字符 string range $str end-2 end
append 在字符串末尾添加新的字符串
string replace 根據索引區間刪除或替換字符 string replace $str end-2 end "hello tcl"
string compare 對兩個字符串進行比較
string equal 判斷兩個字符串是否相等 string equal -length 3 hello Hello
string frist 從字符串頭部至字符串尾部搜索與指定字符串相同的子字符串 string first th $str 10
string last 從字符串尾部至字符串頭部搜索與指定字符串相同的子字符串
string match 用於通配符樣式的匹配 string match t* tcl
format 將字符串按照指定格式顯示
string totitle 將字符串轉換為標題形式
string toupper 將字符串中的小寫字母轉換為大寫字母
string tolower 將字符串中的大寫字母轉換為小寫字母
string trim 去除字符串開頭和結尾處的裁剪字符
string trimleft 只去除字符串開頭處的裁剪字符
string trimright 只去除字符串結尾處的裁剪字符

第四章 列表

總結:

已在第三章概括。

命令 功能 語法
list 創建列表 list后直接跟隨列表元素
concat 拼接多個列表,合成一個新的列表 concat后可以跟隨一個或多個列表
lrepeat 通過重復元素集合的方式創建列表 lrepeat+重復次數+重復元素
llength 獲取列表長度(列表中的元素個數) llength+列表名
lindex 根據索引值獲取列表長度 lindex+列表名+索引參數
lrange 獲取索引值指定范圍內的列表長度 lrange+列表+第一個索引值+第二個索引值
lassign 獲取列表元素,並將其分配給指定變量 lassign+列表+變量名
lappend 向列表末尾添加新元素 lappend+列表名(不加$符號)+新加的元素
linsert 向列表的指定位置添加新元素 linsert+列表+新元素的起始索引+新元素(原列表沒有改動)
lreplace 刪除或替換索引值指定范圍內的列表元素 lreplace+列表+待刪除元素起始索引+終止元素索引
lset 替換索引值指定位置上的列表元素 lset+列表名(不加$符號)+替換索引+替換值
lsearch 根據搜索模式和匹配模式查找目標列表元素 lsearch+列表+匹配模式(-glob、-exact、regexp)
lsort 對列表元素進行排序 lsort+(-ascii -increasing or -decreasing、-integer、-real、-unique、-index)
split 根據分割字符分割字符串,並創建列表 split+字符串變量+分割字符
join 把列表元素串接成一個字符串 join+列表+分割字符
foreach 遍歷列表元素,執行循環腳本 foreach+變量名+列表+構成循環體的tcl腳本

第五章 數組

總結:

構成數組的三個要素:數組名+元素+值

命令 功能 語法
array exists 判定數組是否已創建,若創建,返回1否則返回0 array exists + 數組名
array size 獲取數組大小 array size + 數組名
array set 創建數組 array set + 數組名 + 數組元素
array names 獲取數組的元素名列表 array names + 數組名
array get 獲取數組的“元素名 值”列表 array get + 數組名
parray 輸出數組元素 parray + 數組名
array unset 刪除數組 array unset + 數組名

第六章 流程控制

總結:

  1. if 命令規定每一個左花括號都必須與它的前一個字符同行
  2. else只是if命令的可選子句,在使用時,要將其與if中第二個參數的右花括號放在同一行,而不能另起一行(elseif也如此)
  3. 在使用switch命令時,可通過短畫線“-”將相同腳本的不同匹配模式捆綁在一起,使代碼更簡潔。
  4. 在switch中添加注釋時,應該把注釋寫在匹配模式對應的腳本中
switch模式匹配方式 含義
-exact 嚴格的字符串比較
-glob sting match命令下的匹配
-regexp 正則表達式匹配

第七章 過程

總結:

  1. 參數名在參數名列表中的順序是:無默認值的參數名帶默認值的參數名特殊參數名args,args一定要位於最后;
  2. return 可使用-code參數返回額外的信息;
  3. 在過程中使用全局變量,可以使用global命令實現,一旦調用,一直生效直到過程返回;
  4. 全局變量可通過局部變量的引用來更新upvar X y,X為全局變量,y為局部變量;
  5. 無論所處多少層級,都可通過#0的形式表明訪問的變量為全局變量;
  6. 有特殊參數args時,會把剩余參數當作一個列表傳入過程。
命令 功能 語法
proc 跟隨三個參數,即過程名、參數名列表和過程塊
過程的參數名列表 參數名列表可以為空,參數可以帶默認值,也可以帶特殊參數args
過程的返回值 可以由return返回,若返回多個值,可以將其放入列表中一次返回
局部變量與全局變量 過程塊內為局部變量,過程塊外為全局變量
global 在過程塊內用global命令指明該變量為全局變量
upvar 三個應用場景:模擬引用;過程塊訪問數組;給變量起別名
info level 返回當前層級信息

第八章 命名空間

總結:
1. variable創建命名空間變量,並對其初始化,每個過程內都需要再次寫variable+變量名;但是如果變量是數組,必須使用array set進行數組的初始化。
2. 變量作用域:·全局變量>命名空間變量>局部變量
3.命名空間變量不可以向下傳遞

命令 功能 語法
namespace eval 創建命名空間
namespace children 返回指定命名空間的子空間
namespace parent 返回指定命名空間的父空間
namespace exists 確定命名空間是否存在
namespace qualifiers 返回參數中最后一個命名空間分隔符之前的所有字符
namespace tail 返回參數中最后一個命名空間分隔符之后的所有字符
namespace delete 刪除指定的命名空間
variable 創建命名空間變量,並對其初始化,也可在過程中使用該命令引用命名空間變量
namespace current 返回當前命名空間名稱
namespace upvar 引用指定命名空間中的命名空間變量
namespace export 導出命名空間中的命令
namespace import 導入命名空間中的命令
namespace forget 遺忘在指定的命名空間
info command 返回指定命名空間包含的所有命名
namespace origin 返回導入命令的原始來源
namespace ensemble create 創建集合命令

第九章 訪問文件

總結:
1. file delete刪除非空目錄,需要加參數-force,會遞歸刪除,需謹慎使用;
2. file copy復制的文件如果已存在會報錯,想覆蓋可加-force,可同時復制多個文件;
3. file rename目標文件已存在會報錯,想覆蓋可加-force
4. glob沒有匹配到文件會報錯,不讓報錯可加-nocomplain
5. puts-nonewline可阻止寫入的文件換行;
6. file stat可一次性得到文件的各種信息,例:file stat readme.txt finfo,finfo是一個數組,用以儲存文件信息。查看信息:parray finfoputs $finfo[atime]

命令 功能 語法
file dirname 返回文件的絕對路徑不含文件名
file extension 返回文件的擴展名
file nativename 返回原生格式的文件名
file rootname 返回文件名除擴展名之外的部分
file tail 返回文件的最后一個部分,即最后一個子目錄下的文件名稱
file split 將文件名按正斜線“/”所在位置進行分割,並返回各部分字符串
file join 將給定字符串拼接為文件路徑
pwd 打印當前工作目錄
cd 切換當前工作目錄到指定目錄
glob 根據模式獲取當前工作目錄下的內容
file mkdir 在當前工作目錄下創建一個新的目錄
file delete 刪除指定的文件或目錄
file copy 可將源文件復制到目標文件
file rename 為指定的文件或目錄重新命名
file exists 查看文件或目錄是否存在
file isfile 判斷指定的內容是否為文件
file isdirectory 判斷指定的內容是否為目錄
file type 查看指定內容的類型
file readable 當指定文件存在且用戶有讀權限時返回1,否則返回0
file writable 當指定文件存在且用戶有寫權限時返回1,否則返回0
file executable 當指定文件存在且用戶有運行權限時返回1,否則返回0
file stat 可一次性得到文件的各種信息
open 根據指定模式打開文件
read 讀取文件內容
close 關閉文件
file size 獲取文件大小(以字節為單位)
gets 獲取文件行內容
eof 讀取到文件末尾,該命令返回1
csv::split 根據分隔符分割csv格式的內容
csv::read2matrix 將csv文件內容讀取到矩陣中
csv::read2queue 獎csv文件內容讀取到隊列中
csv::join 將列表元素按照分隔符拼接為csv格式的內容
csv::joinlist 將嵌套列表按照分隔符拼接為csv格式的內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM