tcl脚本语言学习

合集下载

TCL脚本入门教程

TCL脚本入门教程

系统学习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入门

Tcl_Interp * interp,
int argc, char* argv[]);
int Tcl_AppInit(Tcl_Interp *interp);
#define MAX_WORD_LEN 32
int GetWordFromStr(const char* pStrSource,char * pDestStr,int len); //这里更改为你好测试的函数定义。
int Tcl_EXGetWord(ClientData clientData,
Tcl安装配置
1. 安装ActiveTcl 8.4(包括Expect扩展)
下载地址:
/ActiveTcl/Windows/8.4.15/ActiveTcl8.4.15.0.280619-win32-ix86-threaded.exe
Expect简介
一个叫做fsck的Unix文件系统检查程序,可以从Shell里面用-y或者-n选项来执行。 在手册[1]里面,-y选项的定义是象这样的。
“对于fsck的所有问题都假定一个“yes”响应;在这样使用的时候,必须特别的小心,因为它实际上允许程序无条件的继续运行,即使是遇到了一些非常严重的错误”
相比之下,-n选项就安全的多,但它实际上几乎一点用都没有。这种接口非常的糟糕,但是却有许多的程序都是这种风格。 文件传输程序ftp有一个选项可以禁止交互式的提问,以便能从一个脚本里面运行。但一旦发生了错误,它没有提供的处理措施。
Expect是一个控制交互式程序的工具。他解决了fsck的问题,用非交互的方式实现了所有交互式的功能。Expect不是特别为fsck设计的,它也能进行类似ftp的出错处理。
Expect被设计成专门针和交互式程序的交互。一个Expect程序员可以 写一个脚本来描述程序和用户的对话。接着Expect程序可以非交互的运行“交互式”的程序。写交互式程序的脚本和写非交互式程序的脚本一样简单。 Expect还可以用于对对话的一部分进行自动化,因为程序的控制可以在键盘和脚本之间进行切换。

TCL脚本入门教程

TCL脚本入门教程

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`命令用于关闭文件。

2024版TCL教程(中文)

2024版TCL教程(中文)
《TCL/TK入门经典》
这是一本经典的TCL/TK入门书籍,详细介绍了TCL语言的基础知识和常用命令,以及如何使 用TCL/TK进行GUI编程。
《TCL编程之道》
这本书深入探讨了TCL编程的高级技巧和最佳实践,适合有一定TCL基础的读者。
TCL博客
一些专注于TCL技术的博客也是学习的好资源,如"TCL专家博客"、"TCL技术分享"等,这些 博客通常会分享一些实用的技巧和经验。
MySQL、PostgreSQL、SQLite等, 并提供连接示例代码。
连接数据库
介绍如何在TCL中执行SQL语句, 包括查询、插入、更新和删除等操 作,并提供相应的示例代码。
执行SQL语句
讲解如何处理查询结果集,包括遍 历结果集、获取字段值和元数据等 操作,并提供相应的示例代码。
TCL实例分析
05
THANKS.
数据遍历
通过`foreach`命令遍历数组或列表中的每个元素,并对每个元 素执行相应的操作。
文件操作与I/O流
文件读写
TCL提供了文件读写命令,如`open`、`read`、`write`等,用于实 现文件的读写操作。
文件路径处理
TCL支持文件路径的处理,如路径拼接、路径分解等,方便进行文 件操作。
错误处理
TCL提供了错误处理机制,如使用`catch`命令捕获异常并处理。通过错误处理,可以确 保程序的稳定性和可靠性。
TCL高级特性
03
过程与函数
过程定义
01
TCL支持自定义过程,可以通过`proc`关键字定义过程,并指定
过程名和参数列表。
函数调用
02
通过过程名及参数列表调用已定义的过程,实现代码复用和模

Tcl脚本测试入门

Tcl脚本测试入门

Tcl脚本测试入门Tcl简介Tcl是一种非常简单的编程语言,如果你以前曾经学过编程,那么你只要学习几个小时就可以编写出一些有趣的Tcl程序。

本文将对Tcl的功能做一个大概的介绍。

一般来说,读完本文之后,你就可以开始独立的编写一些简单的Tcl 脚本了;不过,要想获得更全面的认识,我们建议你还是去参考几本目前已经出版的 Tcl书籍。

基本语法Tcl脚本由一些被换行符或是分号分开的命令所组成。

命令都有相同的基本格式,如下面的例子所示:expr 20 + 10该命令计算20加10的和,并返回结果30。

你可以把这个例子以及本文中的所有其它的例子键入到tclsh这样的Tcl应用程序中来验证它们;在一个命令结束后,tclsh将打印出它的结果。

每个Tcl命令都含有一个或多个被空格分开的单词,在这个例子中有4个单词:expr,20,+,和10。

第一个单词是一个命令名,其余的单词是这个命令的参数。

所有的Tcl命令都含有一些单词,但不同的命令对他们的参数有不同的处理方式。

expr命令把它的所有参数看作是一个算术表达式,计算表达式的结果,并以字符串的形式返回结果。

在expr命令中,单词之间的分隔不是很重要:同样的命令你可以写成这种形式:expr 20+10不过,对大部分的命令来说,单词的结构是很重要的。

每个单词都会用于不同的目的。

所有的Tcl命令都返回结果。

如果一个命令产生了没有意义的结果,那么它将返回一个空字符串作为它的结果。

变量Tcl允许你在变量中保存数值,并且可以在后续的命令中使用这些数值。

set命令用于对变量进行读写操作。

比如,下面的命令对变量x赋值为32。

set x 32这个命令返回变量的新值。

你可以让set只带一个参数来读出变量的数值:set x你不需要在Tcl中声明变量:变量在第一次set的时候被自动创建。

Tcl变量没有类型:任何值可以赋给任何变量。

要想在一个命令中使用变量的值,可以采用变量替代,如下例所示:expr $x*3当一个字符$出现在一个命令中的时候,Tcl把跟在它后面的字母和数字看作是一个变量名并且将其替换成变量的值。

TCL脚本语言-9-过程和变量

TCL脚本语言-9-过程和变量

过程和变量前面的章节中我们对过程和变量已经有了较多的接触了,还定义了一些自己的过程,并且对列表和数组等有了深入的了解。

本章节中我们将系统的深入了解TCL中的过程和变量相关的知识。

首先从过程定义开始。

定义过程TCL中,“过程”和“函数”没有差别,这一点和C语言类似。

在这本书当中,TCL的“过程”和“函数”是两个完全等价,可以互相替换的概念和术语。

TCL定义任何过程的语法如下:proc name arglist bodyproc是标准的TCL核心命令之一,用来定义一个过程。

它带有三个参数:过程名字、过程的参数列表以及过程体。

1.过程名字可以是任意的字符串。

当然了,本着易读和可维护性的原则,我们建议按照C语言语法惯例来命名。

如果你喜欢中文,也可以给你定义的过程一个中文名字。

如果定义的过程已经存在了,那么新定义的过程会替换掉原来的定义,这一点和C不同。

在C中,函数是不能够被重复定义的。

2.参数列表用来声明本过程的调用参数形式,它应该是一个TCL列表。

列表的每一个元素就是一个过程的形式参数。

当然列表可以为空,表示本过程不需要参数。

3.过程体是一块TCL脚本,当本过程被调用的时候,就执行该脚本。

4.过程返回值可以直接在body中调用return来返回,如果没有执行return就返回,那么body中最后被执行的那条命令的返回值就是过程的返回值。

TCL中的过程支持递归,包括直接递归和间接递归。

下面我们定义一个阶乘函数:proc Factorial {n} {if {$n==1} {return 1}return [expr {$n * [Factorial [expr $n-1]] }] ;#递归调用}puts [Factorial 4]其中Factorial是过程名;{n}是参数列表,只有一个元素,表示过程Factorial只有一个参数;过程内部通过递归调用来计算参数n的阶乘。

全局、局部TCL中的变量也有作用范围之说。

synopsy的Tcl脚本语言学习笔记

synopsy的Tcl脚本语言学习笔记

TCL脚本语言学习(1)当输入的命令较长时,可以使用反斜线 \ 将一行命令分割为几行,例如:set target_library \/home/fzz/synopsys/library/slow.db上面的命令等价于set target_library /home/fzz/synopsys/library/slow.db(2)缩略语命令:Synopsys的命令可以缩略到非含糊的形式,但是在脚本文件中应该少使用缩略命令,因为脚本文件在某些Synopsys的工具或者TCL中的命令易于发生变化,这种变化因为缩略而变得含糊。

(3)可以使用Synopsys中的“history”命令列举或者执行出先前使用过所有命令,例如:dc_shell> history info 5该命令将列举出最近执行过的5跳指令dc_shell> history redo 4该命令将执行在当前 dc_shell中执行过的命令中的第4条指令,这里面redo 后面的数据如不是有效的,则将重复执行最后输入的命令。

例如dc_shell> history redo -4, -4 无效,将重复执行最后输入的有效指令也可以采用快捷键的方式,输入“!!”命令,重新执行命令。

例如:dc_shell> !!set target_library /home/fzz/synopsys/library/slow.db/home/fzz/synopsys/library/slow.db能够重复执行某条指令可以使用Dc_shell> !5(4)以命令行方式获得help使用-help 命令获得帮助Dc_shell> echo –help同样可以使用for命令获得help的所有命令,输入方式如下:dc_shell> help for*也可以获得特殊的命令组的所有命令的列表,通过输入命令集合的名字,例如:dc_shell> help procedures使用man命令也可以使用man命令获取Synopsys中获得帮助的相应命令,例如:dc_shell > man query_objects(5)Command Status命令状态时命令返回值,所有的命令都返回一个一个字符串或者 null,默认时命令状态值返回控制窗口,例如:dc_shell >set total_cells 0 ,这里定义了一个新的变量dc_shell >incr total_cells(6)Quoting 引用使用quoting disable一些特殊字符的含义(例如:[],$ and ;)dc_shell> set a 5; set b 1010dc_shell> echo {[expr $b - $a]} evaluates to [expr $b - $a][expr $b - $a] evaluates to 5双引号标示特殊的较弱的quoting,使用举例如下:dc_shell> Set A 10; set B 44dc_shell> ech o “A is $A; B is $B.\nNet is [expr $A - $B].”chapter 2 Tcl基础Variables变量dc_shell> set buf_name 1si_10K/B1I1si_10K/B1Idc_shell> set a 11dc_shell> set b 2.5Tcl中所有的变量都是字符串,Tcl不识别变量是整数或者实数的变量dc_shell> set b 1010dc_shell> incr b11dc_shell> incr b -65Incr的默认增加值是1,如果增加的不是整数值,那么则会报错,例如:dc_shell> set b 2.42.4dc_shell> incr bError …为了查找一个变量是否存在,可以使用tcl的info exists命令,例如说,为了查看变量total_cells是否存在,键入:dc_shell> info exists total_cells如果变量存在,则info exists返回1,否则,返回0。

TCL语言学习入门

TCL语言学习入门
TCL脚本语言学习
语言简介
Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。是tool command language的缩写,发音为"tickle”。实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。它有一个简单的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。
1
2
set a 20; set b 4;
set c [expr $a/$b];#此时的c的值为5
除此之外,expr还能够识别一些函数及其返回值如下:
abs(x) x的绝对值
round(x) x舍入后得到的整数值
sin(x) x的正弦
…………………………………..
举个例子:
1
set a [expr sin(0.3)];#计算0.3的正弦
switch $element{
# 判断element的值
}
}
for是最常用的循环。其基本结构为:
for {initialization} {condition} {increment} {body}
例如:
1
for{set i 0} {$i< 10} {incr i} {puts $i;} #将打印出0到9
1
2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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) 。
2、concat 命令:
以空格为分隔符将多个列表拼装在一起成为新的列表。 %set x {1 2} ;set y [concat $x 3]; => 1 2 3
它的作用等同于双引号:set y "$x 3"
3、lappend 命令:
用来将新元素追加到列表末尾。注意显示的时候会有空格 set a hel;lappend a lo; =>hel lo (由此可以看出, lappend 可以用于创建一 个列表)
5、string 命令:
(1) 、string compare、string equal 字符串比较
例 4-8string compare 和 string equal 进行字符串比较的例子 %set s1 abc =>abc %set s2 abd =>abd % if { [string compare $s1 $s2] == 0} { puts "s1 is same as s2" } else { puts "s1 isn’t same as s2" } => s1 isn’t same as s2 %if { [string equal $s1 $s2]} { puts "s1 is same as s2" } else { puts "s1 isn’t same as s2" } => s1 isn’t same as s2 (2)string match:匹配 string match alpha alpha;=>1;#匹配时输出 1 string match {[alpha]*} bfadsalpha ;=>0 ;#表示要匹配以 alpha 任何一个开头的 字符串 (3)string replace:字符串替换 (4)字符串映射:string map string map 命令根据字符映射对字符串进行转换。映射以输入、输出表的形 式表示。 凡是字符串中包含有输入序列的地方都使用相应的输出序列替换(列表 中输入后的字符) 。输入、输出要成对使用,如: string map {f p d l} "food" =>pool string map {f pp d ll oo a} "food" =>ppall
2、变量赋值与取消定义:
语法为:set vanName [value] unset varName set:变量定义和赋值命令,为变量赋值时,会为变量开辟一段内存空间来 存储变量值。 set 命令也可以只跟变量而无变量值,若变量已经定义,则返回变 量值,效果和 puts 类似,如果该变量不存在,则返回错误信息。当设置了一个 变量时,要读取它可以通过“$”符号来引用。 set a hello; #定义变量 a 并赋值 puts $a; #此时输出的就是 hello,有点类似指针的概念 set b $a; #把 hello 这个值赋给 b Unset:取消变量定义,并释放变量指定区段的列表元素,可以以 end 或者 end-n 作为索引(n 为正 整数) 。 lrange {1 2 3 {4 5} 6} 2 end ;=> 3 {4 5} 6
7、linsert 和 lreplace 命令:
linsert 命令用来将元素插入到一个列表由索引指定的位置。如果索引为 0 或者更小,则元素就会被添加到最前面。如果索引值大于或者等于列表长度, 则 元素被追加到列表尾部。其他情况元素被添加到指定位置之前。 lreplace 命令将一个指定区段的列所谓的替代,其实包含 3 层意思,一、变 量的替代。二、命令的替代。三、反斜杠替代。 变量的替代: set var 5;set b $ var; 在这里,使用$符号就是一个替代的例 子,它相当于替代 Var 变量的数值给$var。 命令的替代: set len [string length foobar],它的意思是把 foobar 的字符长度 给 len。嵌套命令由【】分隔,这是一种命令替代。 如果在一个命令中有多重命令替代,那么是按照从左到右的顺序处理,每遇 到右中括号就开始处理其分隔的命令。 反斜杠替代: 它用来引用对于解释器有特殊意义的字符。 此时 a 的值为$b。 比如 set a \ $b;
TCL 脚本语言学习 前言
Tcl 和 Java 一样,是平台无关的语言, windows 、linux 下面都可运行; Tcl 和 Perl 一样,是脚本语言,无须编译,解释执行;Quartus II 支持 Tcl;Modelsim 支持 Tcl,.do 文件就是按照 Tcl 语法写的;学会了 Tcl,Quartus II 的项目设置可 以随身带走,项目维护简便至极;学会了 Tcl,可以把 Quartus II 的 STA 工具用 起来,时序分析从此不难;学会了 Tcl,自己就能 EDA。
3、替换:
(1) 、用“$”可以引用替换功能,但是注意 TCL 对替换只进行一遍解释,对 嵌套的“$”不予理睬 例如: set a hello set b a set x $$b,此时输出为$a (2) 、[]也可以完成替换的命令 例如:set b [set a 5] 或 set b [expr 5*10]
列表操作命令 1、list 命令:
用来创建列表,一个列表可以包含子列表,即列表可以嵌套。 set l1 [list Sun Mon Tues] ; =>Sun Mon Tues #列表 l1 中含有 3 个元素 set l2 [list $l1 Wed] => {Sun Mon Tues} Wed ; #列表 l2 中含有两个元素。第一个元素用花括 号括起来。
语法
基本操作命令 1、输出:
语法为:puts ?-nonewline? ? channelled? String 例如:puts hello,如果是写成 puts -nonewline hello,就是表示不输出回车换行。 如果是 puts {"hello,world!"} ,此时输出的结果是“hello,world!” 注意:puts stdout {"hello,world!"},与上面的输出是一样的,这里 stdout 是表示 标准输出 I/O 流,它同 stderr(用于标识标准出错输出) ,stdin(标准输入)一样, 是和其他文件的 I/O 命令的约定。
字符串基本指令 1、append:
将值追加到字符串尾, 将一段字符串连接到另一字符串尾部从而组成新的字 符串。 语法: append varName ?value? 例 如: set var1 hello; set var2 world; append var1 $var2; # 此 时输 出的 就 是 helloworld,也就是 var1 的值现在变成 helloworld。
4、“\”的作用:用于引用特殊字符或特殊功能。
例如:set x "\$a";#把 X 定义为$a puts "\a" ;#输出震铃(在 tclsh 下运行) puts "\nhello" ;#\n 表示换行显示 hello 所谓的替代,其实包含 3 层意思,一、变量的替代。二、命令的替代。三、 反斜杠替代。 set var 5; set b $ var; 变量的替代: 在这里, 使用$符号就是一个替代的例子, 它相当于替代 Var 变量的数值给$var。 命令的替代: set len [string length foobar],它的意思是把 foobar 的字符长度 给 len。嵌套命令由[]分隔,这是一种命令替代。 如果在一个命令中有多重命令替代,那么是按照从左到右的顺序处理,每遇 到右中括号就开始处理其分隔的命令。 反斜杠替代:它用来引用对于解释器有特殊意义的字符。比如 set a \ $b; 此 时 a 的值为$b。 反斜杠还有一个作用就是在多行之间延续长命令, 因为换行符会结束一个命 令。
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 的个数与变量的 个数要一一对应。
2、format:
根据一组格式说明来格式化字符串,此命令不会改变被操作字符串的内容。 语法:format spec value1 value2... 其中,spec 包含了格式说明关键词和附加文字,使用%来引入一个关键词, 后跟 0 个或多个修饰符,然后使用一个转换格式符结尾。 关键词的基本格式是:“%aaaB" ,aaa 表示修饰符,B 表示一种格式转换符。 valueX 是变元,其关键词可以多达 6 部分:位置说明符、标志、字段宽度、 精度、长度、转换符。 例如:format ”%8x“20 ;#将 20 转换为十六进制数,8 位数据宽度,右对齐。 如果是-8x 表示左对齐。
相关文档
最新文档