Tcl编程简介(五)

lsort -mode list

排列列表。


-mode : -ascii


  -dictionary 与acsii类似,只是不区分大小写


  -integer 转化为整数再比较


  -real 转化为浮点数再比较


  -command command 执行command来做比较



open fileName
open fileName access




  打开文件,返回一个文件描述符。



access
r w a r+ w+ a+



  定义与C中相同。如文件名的第一个字符为|表示一管道的形式来打开。



set f [open |more w]
set f [open /etc/pass r]


proc name args body



  创建一个新的过程,可以替代任何存在的过程或命令。



proc wf {file str} {
puts -nonewline $file str
flush $file
}
set f [open /tmp/a w]
wf $f "first line "
wf $f "second line "



  在函数末尾可用 return 来返回值。


puts -nonewline fileId string


  向fileId中写入string,如果不加上 -nonewline 则自动产生一个换行符。


pwd


  返回当前目录。



read fileId
read fileId numBytes



  从fileId中读取numBytes个字节。



regexp ?switches? exp string ?matchVar? ?subMatchVar
subMatchVar ...?



  执行正则表达式的匹配。



?switches? -nocase 不区分大小写
-indices 返回匹配区间



  如:



regexp ^abc abcjsdfh
//return 1
regexp ^abc abcjsdfh a
//return 1
puts $a
//return abc


regexp -indices ^abc abcsdfjkhsdf a
//return 1
puts $a
//return "0 2"



regsub ?switchs? exp string subSpec varName


  执行正则表达式的替换,用subSpec的内容替换string中匹配exp的部分。


  ?switchs? -all 将所有匹配的部分替换,缺省子替换第一个,返回值为替换的个数。


  -nocase 不区分大小写。


  如:



regsub abc abcabcbac eee b
//return 1
puts $b
//return "eeeabcabc"


regsub -all abc abcabcabc eee b
//return 3
puts $b
//return "eeeeeeeee"



return
立即从当前命令中返回。
proc ff {} {
return friday
}


set a [ff]
//a = "friday"



scan string `format" varname ...


  从string中安format来读取值到varname。


seek fileId offset ?origin?


  移动文件指针。


origin: start current end


  offset从哪里开始算起。


set varname ?value?


  设置varname用value,或返回varname的值。如果不是在一个proc命令中则生成一个全局变量。


source fileName


  从filename中读出内容传给Tcl解释起来执行。


split string ?splitChars?


  将string分裂成列表。缺省以空白为分隔符,也可通过splitChars来设定分隔符


string subcommand arg ...


  用于字符串的命令。


string compare string1 string2


  执行字符串的比较,按 C strcmp 的方式。返回 -1, 0, or 1。


string first string1 string2


  在string1种查找string2的定义次出现的位置。未找到返回-1。


string length string


  返回字符串string的长度。


string match pattern string


  判断string是否能匹配pattern。pattern是以shell文件名的统配格式来给出。


string range string first last


  返回字符串string中从first到last之间的内容。


string tolower string


  将string转换为小写。


string toupper string


  将string转换为大写。


string trim string


  将string的左右空白去掉。


string trimleft string


  将string的左空白去掉。


string trimright string


  将string的右空白去掉。


tell fileId


  返回fileId的文件指针位置。


time command


  执行命令,并计算所消耗的时间。



time "ls --color"
some file name
503 microseconds per iteration
trace subcommand
trace subcommand arg ...



  监视变量的存储。子命令定义了不少,但目前只实现了



virable。
trace variable name ops command
name 为变量的名字。
ops 为要监视的操作。
r 读
w 写
u unset



  command 条件满足时执行的命令。


  以三个参数来执行 name1 name2 ops name1时变量的名字。当name1为矢量时,name2为下标,ops为执行的操作。


  例如:



proc ff {name1 name2 op} {
puts [format "%s %s %s" name1 name2 op]
}
set a hhh
trace variable a r {ff}
puts $a
//return "a r hhh"


unknown cmdName



  unknown 并不是 Tcl 的一部分,当 Tcl 发现一条不认识的命令时会看看是否存在 unknown命令,如果有,则调用它,没有则出错。


  如:



#!/usr/bin/tclsh
proc unknown {cwd args} {
puts $cwd
puts $args
}
//下面是一条错误命令
sdfdf sdf sdkhf sdjkfhkasdf jksdhfk
//return "sdfdf sdf sdkhf sdjkfhkasdf jksdhfk"



unset name ...


  删除一个或多个变量(标量或矢量)。


uplevel command ...


  将起参数连接起来(象是在concat中)。最后在由level所指定的上下文中来执行。如果level是一个整数,给出了在栈中的距离(是跳到其它的命令环境中来执行)。缺省为1(即上一层)。


  如:



#!/usr/bin/tcl
proc ff {} {
set a "ff" //设置了局部的a
-------------------------
}
set a "global"
ff
puts $a
//return "global"



  再看下一个:



#!/usr/bin/tcl
proc ff {} {
uplevel set a "ff" //改变上一级栈中的a
-------------------------------------
}
set a global
ff
puts $a
//return "ff"



  如果level是以#开头后接一个整数,则level指出了在栈中的绝对位置。如#0表示了顶层(top-level)。


  a b c 分别为三个命令,下面是它们之间的调用关系,


top-level -> a -> b -> c -> uplevel level


  绝对位置: 0 1 2 3


  当level为 1 或 #2 都是在 b 的环境中来执行。


  3 或 #0 都是在 top-level 的环境中来执行。


upvar ?level? otherVar myVar ?otherVar myVar ...?


  在不同的栈中为变量建立连接。这里的level与uplevel中的level是同样风格的。


  例如:



#!/usr/bin/tcl
proc ff {name } {
upvar $name x
set x "ff"
}
set a "global"
ff a
puts $a
//return "ff"


while test body



  举个例子吧:



set x 0
while {$x<10} {
puts "x is $x"
incr x
}



  Built-in variables 内建的变量下名的全局变量是由 Tcl library 自动来管理的。一般是只读的。


env


  环境变量数组。


  如:



puts $env(PATH)
// return /bin:/usr/bin:/usr/X11R6/bin


errorCode



  当错误发生时保存了一些错误信息。用下列格式来存储:


CHILDKILLED pid sigName msg


  当由于一个信号而被终止时的信息。


CHILDSTATUS pid code


  当一个子程序以非0值退出时的格式。


CHILDSUSP pid sigName msg


  当一个子程序由于一个信号而被终止时的格式。


NONE


  错误没有附加信息。


UNIX errName msg


  当一个内核调用发生错误时使用的格式。


errorInfo


  包含了一行或多行的信息,描述了错误发生处的程序和信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这本教程花费了我足足两个月的时间写的,每个章节以例子为核心讲解知识点,最大的好处是要用的时候把代码粘贴一下,修改修改就可以上手用了,绝对原创,光是调试这些例子就够我折腾了。知识点覆盖比较全面,要个20分不过分吧,有几本书认真讲过那些常用模块: socket, 数据库操作,xml解析,多线程,最具体的做法多半是一带而过,我可是一个例子一个例子做出来的。 把目录发给大家看看: 2.1 第1课:简单文本输出 5 2.2 第2课:给变量赋值 5 2.3 第3课:命令的赋值与置换一 6 2.4 第4课:命令的赋值与置换二 7 2.5 第5课:命令的赋值与置换三 7 2.6 第6课:算数运算 8 2.7 第7课:文本比较-SWITCH应用 9 2.8 第8课:数值比较-IF应用 10 2.9 第9课:WHILE 循环 11 2.10 第10课:FOR循环和INCR 11 2.11 第11课:过程PROC 12 2.12 第12课:过程PROC的参数定义 13 2.13 第13课:变量的作用域 13 2.14 第14课:LIST结构 14 2.15 第15课:LIST项的增删改 15 2.16 第16课:更多LIST相关 16 2.17 第17课:字符串函数 17 2.18 第18课:更多字符串函数 17 2.19 第19课:修改字符串函数 20 2.20 第20课:正则表达式 21 2.21 第21课:更多正则表达式 22 2.22 第22课:数组 24 2.23 第23课:更多数组相关 25 2.24 第24课:文件存取 28 2.25 第25课:文件信息 30 2.26 第26课:TCL中的子进程调用-OPEN & EXEC 33 2.27 第27课:命令或者变量是否存在-INFO 34 2.28 第28课:解释器状态-INFO 35 2.29 第29课:过程信息-INFO 36 2.30 第30课:模块化-SOURCE 37 2.31 第31课:建库-UNKNOWN & INFO LIBRARY 38 2.32 第32课:创建命令-EVAL 40 2.33 第33课:在EVAL中应用FORMAT & LIST 40 2.34 第34课:不使用EVAL替换-FORMAT & SUBST 42 2.35 第35课:改变工作目录- CD & PWD 43 2.36 第36课:调试和错误-ERRORINFO & ERRORCODE & CATCH 44 2.37 第37课:调试-TRACE 45 2.38 第38课:命令行参数和环境串 46 2.39 第39课:TIME & UNSET 47 2.40 第40课:SOCKET & FILEEVENT & VWAIT 49 2.41 第41课:日期时间-CLOCK 51 2.42 第42课:I/O通道-FBLOCKED & FCONFIG 53 2.43 第43课:子解释器 56 2.44 第44课:数据库操作 57 2.45 第45课:函数或过程数组的输入和输出方法 59 2.46 第46课:INFO的用法 60 2.47 第47课:多线程 61 2.48 第48课:解析XML 72
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值