檔案﹑字串﹑串列﹑陣列

本單元以一個問題為例, 介紹 Tcl/Tk 中常用的資料結構. 請參考問 寫程式時可能遇到的 big-5 碼問題 及範例程式 b5tm.
  1. 檔案 (file) 常用命令摘要
    1. pwd 目前工作目錄是?
    2. cd 更換目前工作目錄.
    3. open 開啟檔案. (參數為檔案名稱; 傳回 file id, 或稱 channel)
    4. close 關閉檔案. (參數為 file id/channel)
    5. gets 讀一列.
    6. read 讀多少 bytes.
    7. puts 寫一列.
    8. eof 測試是否讀/寫到最後了.
    9. flush 清除 buffer 內的東西.
    10. file 切割檔名 (完全不考慮檔案是否存在) 的選項: dirname 目錄, tail (不含目錄的) 檔名, extension 附檔名, rootname 主檔名.
    11. file 不開啟檔案, 直接查詢檔案狀態的選項: 一大堆, 可查檔案究竟是目錄/socket/捷徑/... 還是一般檔案; 大小, 修改日期, 讀寫執行權限, 擁有人...
    12. glob 找出名稱符合某個 "樣版" 的所有檔案. 有 ? * [ ] { } \ 等特殊字元.
  2. 字串 (string) 常用命令摘要
    1. string length 字串的長度.
    2. string compare 比較字串.
    3. string first 到第二個字串裡面去找第一個字串, 看看在那個位置找到. (從左邊找起)
    4. string last 到第二個字串裡面去找第一個字串, 看看在那個位置找到. (從右邊找起)
    5. string index 取出字串的第幾個字元.
    6. string range 取出字串的子字串.
    7. string tolower 轉成小寫.
    8. string toupper 轉成大寫.
    9. string trim 刪除兩邊的空格.
    10. string match 以 glob 方式檢查字串是否符合某個 "樣版"
    11. regexp 以 regular expression 方式檢查字串是否符合某個 "樣版".
    12. regsub 以 regular expression 方式把字串當中符合某個 "樣版" 的子字串代換掉.
    13. format 用以產生複雜的字串 (例如用於準備給 eval 當參數的字串)
  3. 串列 (list) 其實還是字串, 只不過是 Tcl/Tk 有很多命令特別認得 "以空格分開的字串" 而已.
  4. 串列 (list) 相關命令摘要
    1. llength 串列有幾個元素?
    2. lindex 取得串列的第 n 個元素.
    3. lrange 取得串列的第 m 個元素到第 n 個元素 (成為另外一個串列).
    4. concat 把數個串列串成更長的一串列.
    5. list 把數個元素組合成一個串列.
    6. join 把串列內的元素用指定的字串 "黏起來" 成為一個字串.
    7. split 把一個字串拆成一個串列 (根據指定的字元分割)
    8. lsearch 串列中的第幾個元素長得像這樣? 有三種比對方式.
    9. lsort 排序 (可根據數字或字串順序, 可從小到大或從大到小)
    10. linsert 在指定的位置插入新的元素.
    11. lreplace 把指定位置的元素代換掉.
    12. lappend 在原來的串列後面接上新的元素. 注意: 只有 lappend 是 destructive (會改變原來的串列), 其他都是 non-destructive (傳回新的串列).
  5. 陣列 (array) 相關命令摘要
    1. array size 陣列有幾個元素?
    2. array names 把指定陣列的所有註標放到一個串列裡面傳回值來.
    3. array exists 這個陣列裡面有這個註標嗎?