1 TCL脚本基本语法(概要)

TCL常用基本语法

一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开。

第一个单词代表命令名,另外的单词则是这个命令的参数,用空格或TAB键隔开。

变量置换$。

命令置换[]

反斜杠置换\ ,例如set msg multiple\ space ,如果没有\则有报警。

双引号将各种分隔符将不作处理,对换行符及$和[]两种置换符会照常处理。

花括号中所有特殊字符成为普通字符,失去其意义。

注释符 ‘#’

$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。

(bin) 28 % set a.1 2

2

(bin) 29 % set b $a.1

1.1

(bin) 30 % set b ${a.1}

2

数组如下:

(bin) 31 % set day(1) 1

1

(bin) 32 % set day(2) 2

2

TCL不能支持复杂的数据类型,不过扩展ITCL填补了这个缺憾。

unset命令可以删除变量。

6/58

字符串

append将文本加到一个变量的后面

incr命令把变量值加上一个整数。

TCL表达式操作数是整数或实数。0开头表示八进制,0X开头表示十六进制

支持加减乘除,移位等操作。

此外expr是TCP的一个命令,

list在TCL中表示集合,可以嵌套定义。

concat命令,把多个list合成一个list.

lindex返回list的第index个0-based元素

llength返回list的元素个数。

linsert返回一个新串,把所有的value参数值插入list的第index个元素之前

lreplace替换第first到第last个元素所有的value参数。

lrange返回list的第first到第last元素组成的串。如果last为end表示到串的最后。

lappend将value值作为一个元素附加到变量varname后面,并返回变量的新值

lsearch返回list中第一个匹配模式pattern的元素的索引,找不到匹配就返回-1.-exact,-glob,-regexp是三种匹配。-exact表示精确匹配,-glob和string match命令匹配方式相同。-regexp表示正规表达式匹配。

lsort这个命令返回把list排序后的串。

Split把string按分隔符splitChars分成一个个单词。例如split “how.are.you” .

Join是命令的逆。把所有元素合并到一个字符串中,中间以joinString分开。

字符串操作

format格式化类似sprintf函数

set msg [format "%s is %d yearsold" $name $age];

scan命令式format命令的逆,类似于sscanf函数。

regexp用于判断正规表达式exp是否全部或部分匹配字符串string,匹配返回1,否则0.

resub命令第一个参数是一个整个表达式,第二个参数是一个输入字符串,这一点和regexp命令完全一样。匹配返回1,否则返回0,不过regsub用第三个参数来替换字符串string中和正规表达式匹配的部分,第四个参数被认为是一个变量,替换后的字符串存入这个变量中。

String命令具有强大的操作字符串的功能,其中option选项多达20个。

控制流:

If后面的{一定要写在上一行,如果不这样TCL解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错误的结果。此外if和{之间需要有个空格,否则TCL会把if{当成一个整体,从而导致错误。

whiletest body

Test是一个表达式,body是一个脚本,如果表达式的值非0,就运行脚本,直到表达式为0才停止循环。

forinit test reinit body

参数init是一个初始化脚本,第二个参数test是一个表达式,用来决定循环什么时候中断,第三个参数reinit是一个重新初始化的脚本,第四个参数body也是脚本,代表循环体。

Foreach命令有两种语法形式

第一种:foreachvarName list body

第二种:foreachvarlist1 list1 ?varlist2 list2 ..? Body

TCL支持switch命令,支持三种匹配方式:-exact,-glob,-regexp方式

缺省是-glob方式。-regexp是正规表达式的匹配方式。

文件

eval可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。

source命令读一个文件并把这个文件的内容作为一个脚本进行求值。

Open命令以access方式打开文件. Open命令返回一个字符串用于表识打开的文件。TCL有三个特定的文件标识:stdin,stdout,stderr.对应标准输入、标准输出和错误通道。

Gets读fileid标识的文件下一行,忽略换行符。

Gets类似的命令是read,不过read不是一行为单位。

Puts把string写到fileid中。

Flush把缓冲区内容写到filed标识的文件中。

Close关闭标识为filedid的文件。

Tcl提供了seek,tell和eof等命令使用户可以非连续访问文件。

TCL提供pwd和cd命令来管理当前工作目录。

文件操作的第二个命令式file,file有许多选项的常用命令,可以用来进行文件操作也可以检索文件信息。

过程

Proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开。

proc add {x y} {expr $x+$y}

定义过程时,可以使用return命令在任何地方返回想要的值。

TCL提供三种特殊的参数形式:

upvar命令使得用户可以在过程中对全局变量或其他过程中的局部变量进行访问。

可以理解成绑定变量。

错误异常

异常是导致脚本被终止的事件。

很多情况下,错误信息提供了足够的信息指出哪里以及为什么发生了错误。如果错误发生在一组深层套嵌的过程调用中,仅仅给出错误信息还不能为指出哪里发生了错误提供足够信息。为了帮助指出错误的位置,当TCL撤销程序中运行的命令时,创建了一个跟踪栈,并且把这些跟踪栈存储到全局变量errorInfo中。

Catch命令可以俘获所有的异常,不仅是错误。Catch命令的返回值表示是那种情况的异常。

深入

利用array命令可以查询一个数组变量中已经定义了的元素的信息。

Info命令提供了查看TCL解释器信息的手段,有超过一打的选项。

例如info exist a

info global

tcl命令提供了trace命令来跟踪一个或多个变量。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/swncz/p/10107644.html

时间: 2024-08-29 09:14:48

1 TCL脚本基本语法(概要)的相关文章

tcl脚本环境搭建——windows下

? 以下内容整理自网络,试验可用 1.下载tcl解释器,并安装http://www.activestate.com/activetcl 2.tclsh85.exe运行bin/tclsh85.exe(wish85.exe:包含了tclsh 和 tk两部分) 3.创建一个简单的tcl脚本:E:/tcl/hello.tcl,输入内容如下:package require Tclpackage require Tkset a "hello world!"puts $a然后在tclsh85.exe

Tcl学习之--语法|变量

[语法|变量] l 脚本.命令和单词 Tcl提供了大约100条命令,Tk提供了另外几十条,脚本包含一条或多条,通过换行符或分号分隔开. set a 12 set b 23 也可以写成一行: set a 12; set b 23 每个命令由多个单词组成,以空格来分隔,首字母为命令名,所以: 1. set -> 单词,同时也是命令名 2. a    -> 单词 3. 12  -> 单词,将该值赋予a l 处理命令 Tcl处理命令分两步: 解析和执行 1)  在解析阶段,Tcl进行一系列简单字

Modelsim仿真tcl脚本与wave.do文件

Modelsim的仿真,如果一直使用图形界面建工程,编译,仿真,一个个加入观察波形的话,未免复杂了一些,尤其是当工程较大,需要观察的信号较多时,下面贴出一些常用的tcl脚本命令和wave.do常用语法: vsim.tcl仿真脚本: vlib compress_lib vmap compress_lib compress_lib set verilog_file_list [ glob verilog/compress/*.v ] foreach i $verilog_file_list { vl

Linux Bash脚本基本语法知识

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 前提:读者能够基本使用一款文本编辑器以及了解文件的权限概念. 准备工作 在/home目录创建script文件用于保存所有的脚本程序: # mkdir /home/script # cd /home/script/ Bash脚本的基本输入输出 第一个bash脚本: # vim ./hello-world.sh 说明: "#!"是一个约定标记,它告诉系统这个脚本需要什么解释器来执行 作为可

使用Tcl脚本调用STC平台的Native API实现测试对象、Device、StreamBlock的创建和配置

环境配置如下: 在Windows的Conmand下操作 # # Configuration file(CommonConFig.tcl) # # Initializing the Script. # This script is used to set common configuration paramters used with the STC-300 class. #Step 1: Load Spirent TestCenter Automation API. # Type in the

使用Tcl脚本分配FPGA管脚

自动生成Tcl文件 Project -> Generate Tcl File for Project... 弹出如下对话框,设置脚本路径. 编辑引脚 使用set_location_assignment分配管脚如下: 第一次配制时,没有set_location_assignment语句,自已在set_global_assignment语句下一行添加即可. 执行Tcl脚本 Tools -> Tcl Scripts... 选中刚新建的Tcl文件,点击Run运行即可! 答疑解惑 1. 为什么Tcl中没

在Quartus中如何使用TCL脚本文件配制管脚

quartus软件分配管脚的方法有两种,一是选择菜单"assignments->pins"进入管脚分配视图手动分配:第二种方法是利用tcl脚本文件自动分配.这里我来介绍第二种方法. 1.生成tcl文件,按图例顺序操作 其中Tcl Script File name 是文件路径 2 找到"set_location_assignment"字段编辑管脚. 第一次配制时,没有set_location_assignment语句,自已在set_global_assignme

L脚本语言语法手册 0.10版

L脚本语言语法手册 0.10版 赵亮       简  介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,目前支持在中文.英文基础上的编程.并可扩展为任意语种.L脚本语言的语法结构简单,程序结构相对松散,易学易用. 目前L脚本语言仍处于开发初期,功能尚不完善.目前提供了一个简单的源码编辑器,建议使用notepad++或者ultraedit进行源码编辑. 目录 一.        介绍.. 2 二.        注释.. 3 三.        对象定义和引用.. 3 四.       

Modelsim中使用TCL脚本编写do文件实现自动化仿真

通常我们使用Modelsim进行仿真,是通过图形界面点点点来进行操作,殊不知Modelsim完美支持TCL脚本语言及批处理命令do文件.简单来说就是从你修改完代码后到你重新编译把需要的信号拉出来查看,现在只需要一个动作即可完成.大大提高了工作效率,博主之前也是点点点了好久,最后发现有这么好的仿真技巧,真是相见恨晚. 下面列举一些常见的TCL脚本命令 Run do文件的一些常用命令 #打开现有工程 project open C:/Users/jayash/Desktop/sim/ImageProc