TCL提供了丰富的文件操作的命令。通过这些命令你可以对文件名进行操作(查找匹配某一模式的文件)、以顺序或随机方式读写文件、检索系统保留的文件信息(如最后访问时间)。

1.文件名

TCL中文件名和我们熟悉的windows表示文件的方法有一些区别:在表示文件的目录结构时它使用'/',而不是'\',这和TCL最初是在UNIX下实现有关。比如C盘tcl目录下的文件sample.tcl在TCL中这样表示: C:/tcl/sample.tcl。

2.2 基本文件输入输出命令

这个名为tgrep的过程,可以说明TCL文件I/O的基本特点:

proc tgrep { pattern filename} {
set f [open $filename r]
while { [gets $f line ] } {
if {[regexp $pattern $line]} {
puts stdout $line
close $f

 以上过程象UNIX的grep命令, 用两个参数调用它,一个是模式,另一个是文件名, tgrep将打印出文件中所有匹配该模式的行。

基本的文件输入输出命令
open name ?access?
open命令 以access方式打开文件name。返回供其他命令(gets,close等)使用的文件标识。 如果name的第一个字符是“|”,管道命令被触发,而不是打开文件。
文件的打开方式和我们熟悉的C语言类似,有以下方式:
r 只读方式打开。文件必须已经存在。这是默认方式。
r+ 读写方式打开,文件必须已经存在。
w 只写方式打开文件,如果文件存在则清空文件内容,否则创建一新的空文件。
w+读写方式打开文件,如文件存在则清空文件内容,否则创建新的空文件。
a 只写方式打开文件,文件必须存在,并把指针指向文件尾。
a+ 读写方式打开文件,并把指针指向文件尾。如文件不存在,创建新的空文件。


open 命 令 返回一个字符串用于表示打开的文件 。当调用别的命令(如 :gets,puts,close,〕对打开的文件进行操作时,就可以使用这个文件标识符。

TCL有三个特定的文件标识: stdin,stdout和stderr ,分别对应标准输入、标准输出和错误通道,任何时候你都可以使用这三个文件标识。

set val(chan) Channel/WirelessChannel set val(prop) Propagation/TwoRayGround set val(netif) Phy/WirelessPhy set val(mac) Mac/802_11 #将协议设置为 DSR 后,同时将队列设置为 CMUPriQueue set val(ifq) CMUPriQueue set val(ll) LL set val(ant) Antenna/OmniAntenna set val(ifqlen) 50 tcl命令 写道 foreach {key value} [array get tcl_platform] {puts "key: $key \tvalue: $value"} 结果 写道 key: osVersion value: 5.1 key: byteOrder value: littleEndian key: threaded val...
TCL基础入门3过程局部变量和全局变量字符串操作format命令scan命令regexp命令文件访问 TCL支持过程的定义和调用,在TCL中,过程可以看作是用TCL脚本实现的命令,效果与TCL的固有命令相似。 TCL中过程是由proc命令产生的: %proc add {x y} {expr $x+$y} proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开,第三个参数是一个TCL脚本,代表过程体。proc生成一个新的命令,可以象固有命令一样调用:
gets fileId ?varName? 读 fileId 标识的文件的下一行,忽略换行符。 如果命令中有varName就把该行赋给它,并返回该行的字符数(文件尾返回-1) 如果没有 varName参数,返回文件的下一行作为命令结果(如果到了文件尾,就返回空字符串)。 需提出注意的是:有varName参数和没有varName参数的文件尾返回标志是不一样的。有varName参数,文件
变量置换$: $ 后面为变量名。将置换成它的值。 命令置换[]:[]内是一个独立的tcl语句 反斜杠置换\:换行符,空格;[、$等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符。 用\t表示TAB 用\n表示换行符 “#” 表示注释。 “” TCL解释器对双引号中$和[]符号会进行变量置换和命令置换。 {} 而在花括号中,所有
观自在琉璃: 关于保持时间的这段描述有误: 『时钟到来之后,数据还要稳定一段时间,这就要求前一级的数据延迟(data delay time)不要大于触发器的保持时间,以免数据被冲刷掉。』 正确如下: 时钟到来之后,数据还要稳定一段时间,这就要求前一级输出的数据延迟(data delay time)不要小于下一级触发器的(保持时间+时钟偏差),以免下一级触发器抓到的是上一级触发器同一时钟边沿的输出。 (1)是小于而非大于。 (2)因为是流水作业,所以并不存在数据被冲刷掉的说法,只关乎是否出现亚稳态,以及是否正确抓到上一级触发器上一时钟边沿的数据。