TCL脚本技术及用法
tcl脚本语言介绍
![tcl脚本语言介绍](https://img.taocdn.com/s3/m/10d9da2b647d27284b735153.png)
中的方括号部分,产生一条新命令
set a "hello" //"hello" 为 set b "hello" 的返
//回值
最终的结果是b="hello" a="hello"
当命令的一个子域以方括号开始以方括号结束,表示要进行一个命令子替换。并执行该子命令,用其结果来替换原命令中的方括号部分。方括号中的部分都被视为Tcl命令。
Variables: scalars and arrays 变量:标量和向量(即数组)
向量就是数组,而标量是没有下表的变量。
我们用C来类比:
int i; // i 是标量
int j[10]; // j 是向量
变量不需要定义,使用的时候会自动的被创建。Tcl支持两种
变量:标量和向量
举个例子来说明吧,
Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以释运行,其强大的功能和简单精妙的语法会使你感到由衷的喜悦,这片文章对 Tcl有很好的描述和说明。如果你看起来很吃力,那是因为 Tcl与一般的语言有一些不同之处,刚开始可能有一些不理解,但很快就会掌握的。请坚持一下,我能坚持写完,你至少也应该坚持读一遍吧!
这里有一个初学者不注意的地方,上述的定义一定要写成那样子。而不能向下面那样写:
proc pf {str}
{
puts $str
}
因为proc实际上也只不过是一条命令,是一换行符或分号来结束的,用集群参数来传递函数体。proc的定义如下:
proc name args tclcommand
TCL脚本入门教程
![TCL脚本入门教程](https://img.taocdn.com/s3/m/23ed2df7998fcc22bcd10de9.png)
系统学习TCL脚本入门教程版本:1. 0作者:次目录1TCL语法 (4)1.1 简介 (4)1.2 运行环境 (4)1.3 本文约定 (4)1.4 参考资料 (4)2引言 (5)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课:创建命令-EV AL (40)2.33 第33课:在EV AL中应用FORMAT & LIST (40)2.34 第34课:不使用EV AL替换-FORMAT & SUBST (42)2.35 第35课:改变工作目录-CD & PWD (43)2.36 第36课:调试和错误-ERRORINFO & ERROR C ODE & 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)3跋 (75)1TCL语法1.1简介作为脚本语言,tcl语法简单而功能强大。
TCL脚本入门教程
![TCL脚本入门教程](https://img.taocdn.com/s3/m/bd40df2cb94ae45c3b3567ec102de2bd9605decb.png)
TCL脚本入门教程```puts "Hello, TCL!" ;# 输出 Hello, TCL!set name "John" ;# 定义一个变量 nameputs "My name is $name." ;# 输出 My name is John.```在这个例子中,第一行的`puts`命令用于输出文本到控制台,第二行的`set`命令用于定义一个变量,第三行的`puts`命令输出带有变量的文本。
在TCL中,变量需要以`$`开头。
- `set`:用于定义和修改变量的值。
- `if`:用于条件判断,根据条件执行不同的代码块。
- `for`:用于循环执行代码块一定的次数。
- `while`:用于在条件满足的情况下循环执行代码块。
- `proc`:用于定义和调用过程(函数)。
- `expr`:用于进行数学运算和表达式求值。
```set age 25set height 1.75set name "Tom"puts "My age is $age."puts "My height is $height meters."puts "My name is [string toupper $name]."```这个例子中,`set`命令用于定义三个变量,`puts`命令用于输出带有变量的文本。
`string toupper`是TCL中的字符串处理命令,用于将字符串转换为大写。
```set file [open "example.txt" r]set content [read $file]close $fileputs $content```这个例子中,`open`命令用于打开一个文件,`read`命令用于读取文件内容,`close`命令用于关闭文件。
TCL脚本技术及用法
![TCL脚本技术及用法](https://img.taocdn.com/s3/m/bffc5a7cf242336c1eb95ee6.png)
TCL内建命令
TCL还提供三种特殊的参数形式: 首先,你可以定义一个没有参数的过程。 % proc add {} { expr 2+3} 其次,可以定义具有缺省参数值的过程。 % proc add {val1 {val2 2} {val3 3}} { % expr $val1+$val2+$val3 %} 另外,TCL的过程定义还支持可变个数的参数,如果 过程的最后一个参数是args, 那么就表示这个过程支持 可变个数的参数调用。
引言
TCL提供了C语言的调用接口,可以很容易地嵌入到C 程序中;由于TCL提供了与C的接口函数,所以可以 在C编写的应用中调用TCL的库函数,执行TCL的命令 或脚本。具体的工作有: ①创建TCL的解释器; ②执行TCL的命令或脚本; ③对返回代码进行处理; ④撤消TCL的解释器。
引言
基本的C程序结构如下: #include <stdio.h> #include <tcl.h> main() { Tcl_Interp *ip; // 定义解释器 int code; ip=Tcl_CreateInterp(); // 创建该解释器 code=Tcl_EvalFile(ip, "test.tcl"); // 执行文件“test.tcl” if(code!=TCL_OK) exit(1); // 是否成功 else exit(0); }
TCL语法
置换
TCL解释器在分析命令时把所有的命令参数当做字符 串对待,置换的作用是获取命令参数所对应的值,而 非命令参数所代表的字符串。 置换包括变量置换、命令置换和反斜杠置换。变量置 换传递的是变量的值,命令置换传递的是命令参数的 计算结果,反斜杠置换主要用于在单词符号中插入诸 如换行符、空格、[、$等被TCL解释器当作特殊符号 对待的字符。置换可以嵌套。
tcl点板原理和技巧
![tcl点板原理和技巧](https://img.taocdn.com/s3/m/a1b87b07590216fc700abb68a98271fe910eaf26.png)
tcl点板原理和技巧TCL点板原理和技巧TCL(Tool Command Language)点板是一种常用的编程语言,它具有简单易学、功能强大的特点。
在编写TCL脚本时,掌握点板的原理和技巧是非常重要的。
本文将介绍TCL点板的原理和一些常用的技巧。
一、TCL点板的原理TCL点板的原理可以简单地理解为将一系列命令按照特定的顺序组织起来,形成一个可以重复使用的模板。
当需要执行某个功能时,只需调用该点板即可。
点板的原理主要包括以下几个要点:1. 命令组织:点板是由多个命令组成的,每个命令都有特定的功能。
这些命令可以按照特定的顺序排列,形成一个完整的点板。
2. 参数传递:点板可以接受参数,通过参数的传递可以使点板具有更强的灵活性。
参数可以是字符串、数值等各种类型,具体根据点板的功能而定。
3. 循环结构:点板可以包含循环结构,使得某些命令可以重复执行。
循环结构可以根据条件进行判断,从而决定是否继续执行。
4. 条件判断:点板可以包含条件判断结构,根据条件的不同执行不同的命令。
条件判断可以使点板具有更强的适应性和灵活性。
二、TCL点板的技巧除了了解点板的原理,掌握一些常用的技巧也是非常重要的。
下面介绍几个常用的TCL点板技巧:1. 参数传递技巧:在调用点板时,可以传递不同的参数,从而实现不同的功能。
参数的传递可以通过点板的定义来实现,也可以通过外部变量的方式来传递。
2. 循环技巧:循环结构是点板中常用的技巧之一。
通过使用循环结构,可以重复执行某个命令或一组命令。
循环结构可以使用for循环、while循环等方式实现。
3. 条件判断技巧:条件判断是点板中常用的技巧之一。
通过使用条件判断结构,可以根据不同的条件执行不同的命令。
条件判断可以使用if语句、switch语句等方式实现。
4. 错误处理技巧:在点板的执行过程中,可能会出现一些错误。
为了保证点板的稳定性和可靠性,需要添加错误处理的机制。
可以使用try-catch语句来捕获和处理错误。
TCL脚本语言-2-基本词法和概念
![TCL脚本语言-2-基本词法和概念](https://img.taocdn.com/s3/m/8f89bd3887c24028915fc30a.png)
基本词法和概念在进一步深入了解TCL的语法之前,弄清楚TCL脚本的几个基本概念以及TCL解释器解释执行一个脚本的基本流程,是很有必要的。
一切都是命令和及其参数TCL脚本语法的本质其实非常简单:1.一个脚本是由一个或多个命令以及其参数顺序排列而成;命令之间用换行字符或者分号分隔;TCL中的一切都是命令及其参数。
2.一个命令语句包括一个命令字以及零个或多个该命令的参数;命令和参数以及参数之间用空格或者Tab分隔;3.如果任何地方出现可以进行置换的操作,那么就会按照规则进行置换;例如下面的一段代码实际上是由三个命令组成的:class CPerson { ;#第一条命令class及其两个参数protected variable m_name ;#成员变量,保护类型,可以被继承protected variable m_sexconstructor {name sex} { ;#构造函数set m_name $nameset m_sex $sex}public method PrintInfo {} { ;#public方法,输出对象信息,可以被继承puts "CPerson [GetInfo]" ;#调用了成员函数GetInfo}public method GetInfo {} {return "name=$m_name; sex=$m_sex" ;#返回对象信息}} ;#第一条命令结束。
CPerson a “Lei Yuhou” Male ;#第二条命令a PrintInfo ;#第三条命令上面代码很长,但是实际上只有三个命令:第一个是class命令,带有两个参数,第一个是类名,第二个是类的定义体;第二个命令是CPerson命令,实际上刚才的class命令在执行之后就定义了一个新的TCL命令,命令名就是我们声明的类名;第三个命令的命令字是a,这是我们刚才创建的对象,实际上CPerson命令在执行的时候又创建了一个TCL命令,其名字就是我们给出的对象名。
TCL脚本语言-14-输入输出系统
![TCL脚本语言-14-输入输出系统](https://img.taocdn.com/s3/m/8f88bd3887c24028915fc315.png)
file split name
和 file join 恰好相反,将路径 name 拆分层各个独立的
目录单元;
file tail name
返回路径 name 中剔除目录名后的最后文件名
请看下面的例子:
% file dirname {d:\tmp\a.txt}
->d:/tmp
% file extension {d:\tmp\a.txt}
perf_test.tcl pkgIfNeeded.tcl test_func.tcl 返回一个列表,三个元素都是搜索到文件名,如果我们下发如下的命令:
glob –directory –types f *.tcl
作者:雷雨后
Email: leiyuhou010@
TCL、Python 和软件测试自动化
v(atime) = 1116764165 v(ctime) = 1116761242 v(dev) = 3 v(gid) = 0 v(ino) = 0 v(mode) = 33188 v(mtime) = 1116545258 v(nlink) = 1 v(size) = 442 v(type) = file v(uid) = 0 % file system $fp
-archive = 1 -hidden = 0 -longname = D:/tmp/aa.txt -readonly = 0 -shortname = D:/tmp/aa.txt -system = 0 % file attributes $fp –shortname #查询短文件名 D:/tmp/aa.txt % file attributes $fp –readonly 1 #让文件具有只读
file stat name varname
TCL脚本基本语法
![TCL脚本基本语法](https://img.taocdn.com/s3/m/0368179384868762caaed529.png)
TCL基本语法1语言简介TCL缩短工具命令语言的形式。
由加州大学伯克利分校的约翰Ousterhout设计它。
它是一种脚本语言,由其自身的解释器,它被嵌入到开发应用程序的组合。
TCL最初在Unix平台中。
后来移植到Windows,DOS,OS/2和Mac OSX。
TCL非常类似于其他UNIX的shell语言,类似Bourne Shell (Sh), the C Shell (csh), the Korn Shell (sh), 和Perl。
它的目的是提供程序与其他程序,也是作为一个可嵌入的翻译相互作用的能力。
虽然原来的目的是为了使程序能够进行交互,可以找到由Tcl/Tk 编写的完全成熟的应用。
1.1TCL特性TCL的特点如下:1、减少开发时间。
2、功能强大和简单的用户界面工具包整合传统知识。
3、一次编写,随处运行。
它可以运行在Windows,Mac OS X和几乎所有的Unix平台。
4、有经验的程序员很容易上手,因为语言就是这么简单,可以在几个小时或几天学习Tcl就可以搞定。
5、可以轻松地用Tcl扩展现有的应用程序。
另外,也可以包括Tcl的用C,C++或Java 来扩展Tcl,或反之亦然。
6、有一组功能强大的网络功能。
7、最后,它的开源,免费的,可以用于其他无任何限制商业应用。
2基本语法2.1命令结构commandName空格arguments。
每条命令之间通过换行或者;隔开。
例如:#设置变量foo为0set foo 0set bar 1;puts $bar; #设置(set 为一个Tcl命令)变量bar为1,输出(puts也是一个Tcl命令)bar2.2注释使用#注释,不过要注意的是下面的注释是错误的:set foo 0 #设置变量foo为0,这种注释是错误的因为tcl解析器总是认为一条命令应该以换行或者分号结束,其他的在同一行中都认为是参数。
所以正确的应该是:set foo 0#设置变量foo为0,这种注释是正确的set foo 0; #设置变量foo为0,这种注释是正确的3变量定义及基本操作tcl可以定义两种类型的变量:变量和数组。
tcl教程
![tcl教程](https://img.taocdn.com/s3/m/160b491c814d2b160b4e767f5acfa1c7aa008236.png)
tcl教程TCL(工具命令语言)是一种脚本语言,主要用于实现自动化工作流程、快速开发小型工具和控制系统等应用。
它具有简单易学、功能丰富以及可移植性好等特点。
本教程将带你从基础开始逐步学习TCL的语法和常用命令,并通过实例演示帮助你快速掌握TCL编程。
1. TCL的安装和运行环境配置首先,你需要下载并安装TCL的最新版本。
在安装过程中,请根据操作系统选择正确的安装文件,并按照向导进行安装。
安装完成后,你可以在命令行界面中输入"tclsh"来启动TCL解释器,并进入TCL编程环境。
2. TCL脚本的基本结构和语法一个TCL脚本通常由一系列的命令组成,每条命令占据一行。
TCL命令以"$"符号开头,如"$command argument1 argument2"。
TCL的注释以"#"符号开头,后面的内容将被忽略。
以下是一个简单的TCL脚本示例:```tcl#!/usr/bin/tclsh# 输出Hello World!puts "Hello World!"```3. 变量和数据类型TCL支持多种数据类型,包括整数、浮点数、字符串、列表和字典等。
你可以使用"set"命令定义一个变量,并使用"$"符号在其他地方引用该变量。
以下是一些例子:```tclset name "Tom"set age 18set pi 3.14159set fruits {apple banana orange}set person(name) "John"```4. 控制流结构TCL提供了常见的控制流结构,如条件语句和循环语句,用于控制程序的执行流程。
以下是一些控制流语句的示例:if语句:```tclif {$age >= 18} {puts "成年人"} else {puts "未成年人"}```while循环语句:```tclset num 1while {$num <= 10} {puts $numincr num}```5. 文件操作TCL提供了一组用于文件操作的命令,如打开文件、读取文件、写入文件和关闭文件等。
tcl脚本语言学习
![tcl脚本语言学习](https://img.taocdn.com/s3/m/33da445d1711cc7931b716f5.png)
4、llength 命令:
用于获得一个列表的元素个数。 set l "a 3 k";llength $l; =>3
5、lindex 命令:
返回列表中指定位置的特定元素,它是从 0 开始计数。 set x { 1 4 5 7 8 0 9};lindex $x 6; =>9 (1 表示第 0 个数,所以第 6 个 数为 9) 。
3、scan:
根据格式描述符来解析一个字符串并将对应值赋给后面的变量。 返回值是成 功转换的个数。 语法:scan string format var?var?..... %c 的作用与 format 的正好相反, 是将一个 ASCII 字符转换为对应的整数值。 与 format 的区别: format 是将多个目标变量转换成一个字符串, scan 是将一 个字符串分解为多个变量。 例如:set num [scan "abcABC" "%c%c " var1 var2] ;puts "$var1 $var2"; 输出:=> 97 98 注意:这里其实只是对 a、b 进行了转换,后面的 cABC 没有转换,要想转 换,只要多写几个%c,后面多定义几个变量就可以了。并且%c 的个数与变量的 个数要一一对应。
8、lsearch 命令:
在给定列表中搜索与匹配字符串匹配的元素,成功就返回正确的元素索引, 否则返回-1。 set l1 [list This is one list] ;set index [lsearch $l1 l*] ;=>3
9、lsort 命令:
lsort 命令实现对列表的排序。排序操作不影响原表,而是返回排序之后的 新表。 排序的方式有多种选择,可以通过-ascii、-dictionary 、–integer、-real 来指 定基本排序类型,然后使用-increasing、decreasing 指定排列方式,默认为-ascii、 -increasing 。要注意 ASCII 排序时使用字符编码;而 dictionary 排序方式整合 大小写,并将包含的数字以数值大小来处理。 set list "a Z z n100 n200 M p Hl hL m 1 20" ; lsort -ascii $list ; =>1 20 Hl M Z a hL m n100 n200 p z
tcl中的if跟正则表达式
![tcl中的if跟正则表达式](https://img.taocdn.com/s3/m/8fcf09c97d1cfad6195f312b3169a4517723e536.png)
tcl中的if跟正则表达式Tcl中的if语句和正则表达式Tcl是一种脚本语言,它具有简单易学、灵活多样的特点,被广泛应用于各类软件开发项目中。
其中,if语句和正则表达式是Tcl中常用的两个功能强大的特性。
本文将针对这两个主题进行详细介绍和讨论。
一、Tcl中的if语句if语句是一种条件判断语句,用于根据给定的条件执行不同的代码块。
在Tcl中,if语句的基本语法如下所示:if {条件} {# 条件成立时执行的代码块} elseif {条件} {# 第一个条件不成立,但第二个条件成立时执行的代码块} else {# 所有条件都不成立时执行的代码块}if语句的条件可以是一个布尔表达式,也可以是一个变量或函数的返回值。
在Tcl中,字符串的非空和非零值都被视为真,而空字符串和零值被视为假。
因此,我们可以使用if语句来判断变量的值是否符合我们的预期,并根据不同的情况执行相应的操作。
下面是一个简单的示例,演示了如何在Tcl中使用if语句:set num 10if {$num > 0} {puts "变量num的值大于0"} elseif {$num < 0} {puts "变量num的值小于0"} else {puts "变量num的值等于0"}在上面的例子中,我们首先定义了一个变量num,并将其赋值为10。
然后使用if语句判断num的值,并根据不同的情况输出不同的结果。
由于num的值为10,所以输出的结果为"变量num的值大于0"。
二、Tcl中的正则表达式正则表达式是一种强大的模式匹配工具,可以用于在字符串中查找和匹配特定的模式。
在Tcl中,我们可以使用正则表达式来进行字符串的匹配和替换操作。
Tcl中的正则表达式使用的是RE库,它提供了一系列的函数和操作符,用于处理字符串的匹配和替换。
我们可以使用if语句结合正则表达式来判断一个字符串是否符合某种模式,并根据不同的情况执行相应的操作。
tcl语言常用命令
![tcl语言常用命令](https://img.taocdn.com/s3/m/0235aa025627a5e9856a561252d380eb629423e7.png)
tcl语言常用命令(最新版)目录1.TCL 语言简介2.TCL 语言常用命令分类3.TCL 语言常用命令示例4.TCL 语言命令的使用技巧5.总结正文1.TCL 语言简介TCL(Tool Command Language)是一种轻量级的脚本语言,主要用于嵌入式系统、测试自动化、网络设备配置等领域。
它的语法简单易学,功能强大,可以快速实现各种复杂的操作。
2.TCL 语言常用命令分类TCL 语言的命令主要分为以下几类:(1)控制结构命令:如 if、else、while、for 等,用于控制程序的执行流程。
(2)变量操作命令:如 set、get、array set 等,用于操作变量及其数组。
(3)字符串操作命令:如 string、substring、trim 等,用于处理字符串。
(4)数学运算命令:如 expr、lset 等,用于实现数学运算。
(5)流程控制命令:如 break、continue、return 等,用于控制程序的执行。
3.TCL 语言常用命令示例以下是一些 TCL 语言常用命令的示例:(1)控制结构命令:```if { $a > $b } {puts "a > b"} else {puts "a <= b"}```(2)变量操作命令:```set a 10set b 20puts "a = $a"puts "b = $b"```(3)字符串操作命令:```set str "Hello, world!"puts "str = $str"puts "substring($str, 0, 5) = $substring($str, 0, 5)"```(4)数学运算命令:```set a 5set b 3puts "a * b = $a * $b"puts "a + b = $a + $b"```(5)流程控制命令:```for { set i 0 } { $i < 10 } { incr i } {puts "i = $i"}```4.TCL 语言命令的使用技巧(1)使用 set 命令为变量赋值时,等号两边不能有空格。
tcl脚本示例
![tcl脚本示例](https://img.taocdn.com/s3/m/d31b3001de80d4d8d15a4f4b.png)
redirect tmp_file {[report_constraint -all_violators -max_delay -nosplit]}; #这里 redirect 的原始命令必须{ }括号 set header_file [open tmp_file r];#此处产生一个句柄,open 为读属性,之后需要关 闭 while {[gets ${header_file} line_1]>=0} { #读取一行,赋值给 line_1,句柄相当于指针。
puts ${header_Err_file} [format "The toal errors is %s" "[llength $Err]" ] foreach a $Err { puts ${header_Err_file} "" ; puts ${header_Err_file} [format "L%s%s" " $num($a) " "$a"]; } puts $header_War_file [format "The toal warnings is %s" "[llength $War]" ] foreach b $War { puts $header_War_file "" ; puts $header_War_file [format "L%s%s" " $num($b) " "$b"]; }
tcl脚本语言中文详解
![tcl脚本语言中文详解](https://img.taocdn.com/s3/m/d3e33403a6c30c2258019e06.png)
T C L用法祥述一TCL语法1 脚本、命令和单词符号一个TCL脚本可以包含一个或多个命令。
命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的:set a 1set b 2或set a 1;set b 2TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。
TCL解释器对一个命令的求值过程分为两部分:分析和执行。
在分析阶段,TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,TCL 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。
2 置换(substitution)注:在下面的所有章节的例子中,'%'为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果。
'//'后面是我自己加上的说明,不是例子的一部分。
TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如:%set x 10 //定义变量x,并把x的值赋为1010%set y x+100 //y的值是x+100,而不是我们期望的110x+100上例的第二个命令中,x被看作字符串x+100的一部分,如果我们想使用x的值'10' ,就必须告诉TCL解释器:我们在这里期望的是变量x的值,而非字符'x'。
怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能。
TCL提供三种形式的置换:变量置换、命令置换和反斜杠置换。
每种置换都会导致一个或多个单词本身被其他的值所代替。
置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。
1) 变量置换(variable subtitution)变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。
TCL培训教程2024
![TCL培训教程2024](https://img.taocdn.com/s3/m/9334c968ae45b307e87101f69e3143323968f5f7.png)
引言:TCL培训教程(二)作为继TCL培训教程(一)之后的延续,旨在进一步深入介绍TCL脚本语言的各个方面。
本文将通过引言概述、正文内容和总结来详细探讨TCL的高级特性与应用,并提供详细的示例和实践指导。
概述:在本文中,我们将重点介绍TCL中的5个大点,包括TCL脚本的文件操作、正则表达式的使用、错误处理和异常处理、TCL的面向对象编程以及和其他编程语言的互操作性。
每个大点将包含5-9个小点,以便更全面地探讨TCL的各个方面。
正文内容:一、TCL脚本的文件操作:1. 文件读取和写入操作:介绍如何使用TCL脚本读取和写入文件,并讨论文件的打开和关闭操作。
2. 文件操作函数:详细介绍TCL中用于文件操作的常用函数和命令,如文件重命名、文件删除等。
3. 文件路径处理:讨论如何处理文件路径,包括相对路径和绝对路径的转换。
4. 文件权限和属性:介绍如何获取和修改文件的权限和属性信息,以及相关的TCL命令。
5. 文件夹操作:介绍如何操作文件夹,包括创建文件夹、删除文件夹以及遍历文件夹内的文件。
二、正则表达式的使用:1. 正则表达式的基本语法:介绍正则表达式的基本语法和元字符的使用方法。
2. 正则表达式的匹配与替换:详细探讨如何使用TCL的正则表达式进行字符串的匹配和替换。
3. 正则表达式的捕获组:介绍如何使用捕获组来提取正则表达式匹配的子串。
4. 正则表达式的高级应用:探讨正则表达式在TCL中的高级应用,如贪婪匹配、非贪婪匹配等。
5. 正则表达式的性能优化:讨论如何优化正则表达式的性能,避免正则表达式的过度复杂。
三、错误处理和异常处理:1. 错误处理的基本概念:介绍错误处理的基本概念和原则,以及TCL内置的错误处理机制。
2. 错误处理命令:详细介绍TCL中的错误处理命令,如catch、error、return等。
3. 异常处理的基本原则:讨论异常处理的基本原则和最佳实践。
4. 异常处理命令:介绍TCL中的异常处理命令,如try、throw等。
TCL脚本语言1-32
![TCL脚本语言1-32](https://img.taocdn.com/s3/m/ecc0b04533687e21af45a994.png)
7
return $result }
#使用 while 循环来实现阶乘 proc Factorial2 {n} {
set result 1 set i 1 while {$i<=$n} {
set result [expr $result*$i] incr i } return $result }
puts "10! = [Factorial1 10]" puts "5! = [Factorial2 5]"
% set PI 3.1415926535897932 3.1415926535897932 % expr "cos($PI/4)*2" 1.41421356237 % expr "sqrt(2)" 1.41421356237
;#创建变量 PI ;#计算得到 sqrt(2) ;#直接计算得到 sqrt(2)
% set sum $r+$i 100+200 % set sum [expr $r+$i] 300 %
;#企图计算 r 和 i 两个变量的和,但是事与愿违; ;#只有这样才行
看看上面的例子就明白了,第一种方法计算 sum,结果 sum 的值是字符串“100+200”。 只有通过第二种方式,使用 expr 命令来计算表达式$r+$i,sum 的值才是我们期望的 300。在 TCL 中,所有的数学计算都是通过 expr 命令来实现的。例如通过计算正弦来得到 2 的平方 根:
;#输出所有的下标
可以看到,TCL 中的数组和我们 C 语言中熟悉的数组完全不是一回事,倒是和 VBScript 中的对象 Dictionary 非常的类似。TCL 中没有多维数组的概念,但是后面我们会讲到如何使 用多维数组。
tcl脚本语言(下)
![tcl脚本语言(下)](https://img.taocdn.com/s3/m/4e9bacdfce2f0066f53322a5.png)
TCL脚本语言
❖ 文件访问 ❖ 错误和异常 ❖ 查询数组中的元素 ❖ Info命令 ❖ 历史记录
文件访问
❖ 基本文件输入输出命令 open命令 语法:open name ?access? 功能:open命令以access方式打开文件name。返回
式的所有文件的列表。其中switches可以取下面的值:-nocomplain : 允许返回一个空串,没有-nocomplain时,如果结果是空的,就返回错误。 -- :表示switches结束,即后面以‘-’开头的参数将不作为switches。 注意:1、glob 还允许模式中包含‘ 括在花括号中间以逗号分开的多种选 择’ ; 2、如果glob的模式以一斜线结束,那将只匹配目录名 。 3、如果glob返回的文件名列表为空,通常会产生一个错误。但是glob 的在样式参数之前的第一个参数是“-nocomplain”的话,这时即使结果 为空,glob也不会产生错误 。
果命令中有varName就把该行赋给它,并返回该行 的字符数(文件尾返回-1),如果没有varName参 数,返回文件的下一行作为命令结果(如果到了文 件尾,就返回空字符串)。
文件访问
❖ 基本文件输入输出命令 read命令 语法1:read ?-nonewline? fileId 功能:读并返回fileId标识的文件中所有剩下的字节。
文件访问
❖ 文件操作和获取文件信息 file命令
file是有许多选项的常用命令,可以用来进 行文件操作也可以检索文件信息。
文件访问
❖ file命令 file atime name :返回一个十进制的字符串,表示文件name最
Vivado之TCL脚本语言基本语法介绍
![Vivado之TCL脚本语言基本语法介绍](https://img.taocdn.com/s3/m/ec216c8684254b35eefd3483.png)
Vivado之TCL脚本语言基本语法介绍TCL脚本语言Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIV ADO也提供了TCL命令行。
最近发现TCL脚本貌似比GUI下操作VIV ADO效率高一些,方便一些。
而且最近跟着官网文档做SDSOC的flatform,发现xilinx 官网的文档里都是用TCL命令来完成操作,于是决心学习一下TCL的语法。
应用程序(如VIV ADO)使用Tcl作为它的命令语言的好处:1 Tcl提供了标准语法,一旦用户掌握了Tcl就可以很容易的发布命令给基于Tcl的程序。
2 Tcl实现了很多的功能,使你的工作变得很方便。
3 TCl可作为程序间通信的接口。
命令格式一条Tcl的命令串包含了多条命令时,用换行符或分号来隔开而每一条命令包含了一个域的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它数据类型Tcl只支持一种数据结构:字符串。
所有的命令、命令里的所有的参数、命令的结果、变量全部都是都是字符串。
简单实例:set i 123将123这个字符串赋值给i变量unset i清除变量set i hi将hi这个字符串赋值给i变量set i hi hellohi hello中有空格,所以加引号set i 123;#开始注释注意注释前,要先用分号,把命令结束掉,或者换行注释基本语法和基础命令在VIV ADO中的TCL命令行里,学习这些基本语法(Windows下》开始》所有程序》Xilinx Design Tools 》Vivado xxx 》Vivado xxx Tcl Shell)1》使用$符号引用变量其中puts是打印命令2》使用[]将命令返回值,作为新命令的参数set j 232命令会返回值232新命令就成了set i 232这里稍微复杂一点点的例子:set i a[set j b][set k c]最后的结果就是:j=b ; k=c ; i=abc3》数组数组不需要声明,直接赋值即可,也不必按照顺序来:set i(1)123 ; set i(16)hi当然也支持任意维数的数组:set i(1,2,3)hi引用的时候直接$i(1,2,3)即可parray命令可以打印出一个数组的全部信息:array命令命令格式:array opTIon arrayNameopTIon 是操作选项,有如下可选:name :返回数组的所有元素的名称size :返回数组的长度startsearch :初始化一次遍历,返回一个遍历标识符(searchId),这个searchId在下面用到,(是可以多个遍历同时进行的)下面的命令格式为:array opTIon arrayName searchId-》nextelement :返回数组中下一个元素,如果没有返回空-》anymore :如果接下来还有元素,返回1,否则返回0-》donesearch :结束遍历4》字符串命令string命令命令格式:string opTIon string1 string2option 是操作选项,有如下可选:compare :按照字母的排序方式比较,string1 《,=,》string2,分别返回-1,0,1 match :判断string1和string2是否匹配first :检索string2中第一次出现string1的位置,如果没有出现string1则返回-1last :和first相反trim :从string1中删除开头和结尾的,string2的字符命令格式:string option stringtolower :返回string中的所有字符被转换为小写字符后的新字符串toupper :返回string中的所有字符串转换为大写后的字符串trimleft :,去除string左空白,类似的还有trimrightlength :返回string1的长度range :string range abcdef 1 2,返回输出结果为bcappend命令字符串追加,可以无限拼接set i aappend i b c dputs $ii变量的值就成了abcd,注意append i b c d命令,而不是append $i b c dsplit命令除此之外,expr还能够识别一些函数及其返回值:abs(x)、round(x)、sin(x)、cos(x)等使用方法:expr 表达式6》list列表类似python中的列表,比如:{abc {def {jkl ccc}}}是一个有两个元素的列表abc和{def {jkl ccc}},Tcl中对list的命令有:(首先set l {abc {def {jkl ccc}}},下面实例中将对这个l列表进行操作)需要注意的是:大部分命令都是对$l进行处理,也把就是l的内容字符串取出来,再处理,并不会对l列表的内容造成影响需要注意的是lappend命令,lappend $l abcd是无效的,必须lappend l abcd才能实现列表内容的更新,而且是直接更改列表的内容7》proc自定义函数proc:proc hello {str} {puts hello:$str}需要注意的是,如果不能一行写完,那建议按照如下格式来定义(主要是要将{放到第一行的末尾):第一行:proc+(空格)+函数名+(空格)+{参数}+(空格)+{中间行:逻辑运算最后行:}全局变量global:用于将过程中的局部变量变成外界可操作的全局变量proc hello {} {global xset x hiset i hello}上述代码,执行结果:return命令:proc hello {} {return world}set i [hello]return命令没啥好说的,上述代码的结果是,将i变量赋值为world字符串8》流控制if 流控制这个同样建议按照格式来:第一行:if+(空格)+{表达式}+(空格)+{中间行:逻辑运算第N行:}+(空格)+else+(空格)+{中间行:逻辑运算最后行:}switch流控制例子如下,一目了然:switch 2 {1 {puts 111}2 {puts 222}3 {puts 333}default {puts xxx}}case流控制case abcd in a {puts 111} *bc* {puts 333} default {puts xxx}上述程序对字符串abcd进行判断:条件一:字符串为a条件二:不管字符串的前后字符是啥,只要中间有bc子字符串即可条件三:default9》循环控制foreach循环:假如想要将0,3,2,1按照顺序分别放到上述switch的判决条件(列表)里,输出四个结果,那就需要这个foreach了:foreach i {0 3 2 1} {switch $i {1 {puts 111}2 {puts 222}3 {puts 333}default {puts xxx}}}for循环:TCL的for循环也是很类似C语言的:for {set i 0} {$i 《10} {incr i} {puts $i}初始化i=0,范围i《10 ,循环i=i+1while循环:set i 10while {$i!=5} {puts $iincr i -1}运行的结果,自己就可以想象了10》字符串转为命令eval命令:set a set ; set b i ; set c hello ; eval $a $b $c上述代码就等效于:set i helloeval将字符串的内容,作为命令,执行11》打印输出之前的那个puts命令也是可以打印到命令行,但是,也只是能打印出来而已,而这个format 类似于C中的sprintf(用于格式化输出):format命令:format可以这样用:format %s %d hello 666set i [format %s %d hello 666]scan命令:说到format,刚好一起把scan说了,这两个命令可以看做是相反的一对,前者组合成字符串,后者把字符串拆分后赋值给变量scan 12.34.56.78 %d.%d.%d.%d a b c d将12.34.56.78拆分,并分别赋值给a b c d四个变量,命令返回赋值成功的变量的个数puts命令:puts当然也可以打印到文件中set f [open test.txt w]puts -nonewline $f hello\nputs $f worldclose $fputs -nonewline $f hello\n表示的是强制不换行打印,否则自动追加一个换行符文件系统基本常用操作:gets 》一次读一行文件puts 》写入文件open 》打开文件close 》关闭文件flush 》刷新缓冲区cd命令和shell中的cd一样pwd命令用于查看当前所在的目录open命令打开文件,返回文件描述符命令格式:open 文件名模式,支持6种模式,和其他编程语言中的文件IO,也是很相似的,模式如下:r 模式:打开只读文件(文件必须存在)r+ 模式:打开可读写文件[r+和a+模式可以类比]w 模式:打开只写文件,若文件存在则清空内容;若文件不存在则创建文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCL内建命令
错误和异常相关命令: catch command ?varName? error message ?info? ?code? return -code code ?-errorinfo info? ?-errorcode errorCode? ?string?
% catch {unset x} msg %1 % set msg % can't unset "x": no such variable
TCL语法
注释
TCL中的注释符是‘#’,‘#’和直到所在行结尾的 所有字符都被TCL看作注释,TCL解释器对注释将不作 任何处理 。 E.G: %#This is a comment % set a 100 # Not a comment % wrong # args: should be "set varName ?newValue?" E.G: % set b 101 ; # this is a comment % 101
TCL内建命令
文件访问命令: 文件名:TCL中文件名和我们熟悉的windows表示文件 的方法有一些区别:在表示文件的目录结构时它使用 ‘/’,而不是‘\’ 。 基本文件输入输出命令 :open gets read puts flush close 随机文件访问命令:seek tell eof 管理当前工作目录命令:pwd cd 文件操作和获取文件信息命令:TCL提供了两个命令 进行文件名操作:glob和file,用来操作文件或获取文 件信息。
TCL内建命令
控制结构命令:if、while、for、foreach、switch、break、 continue % set b " " % set i [expr [llength $a] -1] % while { $i>=0}{ % lappend b [lindex $a $i] % incr i -1 %}
引言
TCL运行环境:Windows/Unix/Linux TCL版本:tcl8.5(最高版本) 运行文件:tclsh85.exe wish85.exe: 包括tcl和tk两个部分 文本编辑器:NotePad \ TextPad \ UltraEdit
TCL语法
TCL语法是TCL解释器对TCL命令进行分析执行的规则 的集合。
TCL内建命令
TCL过程与作用域命令: TCL中过程是由proc命令产生 E.G:% proc add {x y } {expr $x + $y} proc命令的第一个参数是你要定义的过程的名字,第 二个参数是过程的参数列表,参数之间用空格隔开, 第三个参数是一个TCL脚本,代表过程体。 proc生成 一个新的内建命令,可以像固有命令一样调用: % add 1 2 %3
在分析阶段 TCL解释器将TCL命令分成一个个的单词,第 一个单词是命令名,其余单词是命令的参数,单词之间用 空格或Tab键隔开,同时进行必要的置换。 在执行阶段TCL解释器根据第一个单词查找该命令是否有 定义,有的话就激活该命令所对应的C/C++过程,并将所 有的参数传递给该命令过程,通过命令过程进行处理。 % set a 3 % set b $a %3
TCL内建命令
% % % % % % % % % % % % % % proc tgrep {pattern filename} { set ff [open result.txt w+] set f [open $filename r] while {[gets $f line]!=-1} { if {[regexp $pattern $line x]} { puts $ff $x flush $ff } } close $ff close $f } tgrep {.*(\d+\.\d+\.\d+\.\d+)} HUAWEI_1log.txt RouterIP:10.20.0.59
TCL语法
置换
TCL解释器在分析命令时把所有的命令参数当做字符 串对待,置换的作用是获取命令参数所对应的值,而 非命令参数所代表的字符串。 置换包括变量置换、命令置换和反斜杠置换。变量置 换传递的是变量的值,命令置换传递的是命令参数的 计算结果,反斜杠置换主要用于在单词符号中插入诸 如换行符、空格、[、$等被TCL解释器当作特殊符号 对待的字符。置换可以嵌套。
TCL内建命令
引用:upvar % proc temp { arg } { % upvar $arg b % set b [expr $b+2] %} % proc myexp { var } { % set a 4 % temp a % return [expr $var+$a] %} 则: % myexp 7 % 13
TCL内建命令
proc do {varName first last body} { global errorInfo errorCode upvar $varName v for {set v $first} {$v <= $last} {incr v} { switch [catch {uplevel $body} string] { 1 {return -code error -errorInfo $errorInfo \ -errorcode $errorCode $string} 2 {return -code return $string} 3 return } } }
TCL简介
引言 TCL语法 TCL内建命令 TCL命令的扩展
引言
TCL指工具命令语言(Tool Command Language) ,主要包 括两个方面的内容:语法和函数库。
TCL语法简单,可扩充性强。 % set a 3 %3 TCL的函数库包含分析器、执行内建命令的例程及定义 新的过程的库函数。这组库函数提供了丰富的扩充函数, 允许用户编写新的命令解释程序,加入TCL 的解释器中;
处理返回结果 对TCL_OK与TCL_ERROR的处理 撤消解释器 删除命令
编写析构过程
TCL命令扩展
方法(一) 编写扩展命令函数: int Tcl_CmdProc(ClientData clientdata,Tcl_Interp* interp, int argc, char* argv[]); 注册命令函数: Tcl_CreateCommand(Tcl_Interp* interp, char* cmdName,Tcl_CmdProc* cmdProc,ClientData clientdata,Tcl_CmdDeleteProc* deleteProc) 缺点:TCL从外部应用到内部实现都是基于字符串的, 这样在涉及到类型转换时,需要在各种数据类型及其 字符串表示之间来回转换,效率比较低,加上TCL是 解释执行的,导致在利用TCL作较为大型的应用程序 时执行速度不够理想 。
Tcl库
初始化 语法分析器 命令循环
应用程序
核心 命令
公用子程序
程序 自定义 命令
TCL命令扩展
扩展一个TCL命令大致可以分为两步:编写扩展命令 对应的C/C++过程,注册命令。对Tcl命令的扩展过 程一般按下图所示的步骤进行:
编写命令处理过程 创建Tcl解释器 进行初始化工作
Tcl初始化(Tcl_Init) 关联命令与命令处理过程 将有关的Tcl变量与C变量关联 指定启动的脚本
TCL语法
变量置换由一个$符号标记 E.G: % set x 10 % 10 % set y $x+100 % 10+100 命令置换是由[]括起来的TCL命令及其参数 E.G: % set y [expr $x+100 ] % 110 反斜杠置换 E.G: % set msg multiple\ space % multiple space。
TCL内建命令
过程内部引用一个全局变量的值,可以使用global命令。 E.G: % set a 4 %4 % proc sample { x } { % global a % incr a % return [expr $a+$x] %} % sample 3 %8
TCL内建命令
引用:upvar 命令语法: upvar ?level? otherVar myVar ?otherVar myVar ...? upvar命令使得用户可以在过程中对全局变量或其他过程中 的局部变量进行访问。upvar命令的第一个参数otherVar是 我们希望以引用方式访问的参数的名字,第二个参数 myVar 是这个过程中的局部变量的名字,一旦使用了upvar 命令把otherVar 和myVar 绑定,那么在过程中对局部变量 myVar 的读写就相当于对这个过程的调用者中otherVar 所 代表的局部变量的读写 。 upvar命令语法中的level参数表示:调用upvar命令的过程相 对于我们希望引用的变量myVar在调用栈中相对位置 。
TCL内建命令
TCL还提供三种特殊的参数形式: 首先,你可以定义一个没有参数的过程。 % proc add {} { expr 2+3} 其次,可以定义具有缺省参数值的过程。 % proc add {val1 {val2 2} {val3 3}} { % expr $val1+$val2+$val3 %} 另外,TCL的过程定义还支持可变个数的参数,如果 过程的最后一个参数是args, 那么就表示这个过程支持 可变个数的参数调用。
TCL内建命令
TCL解释器自身提供的一些命令: 变量 列表 控制结构 过程与作用域 字符串操作 文件访问 错误和异常 其他TCL命令