TCL基础入门3

过程

TCL支持过程的定义和调用,在TCL中,过程可以看作是用TCL脚本实现的命令,效果与TCL的固有命令相似。
TCL中过程是由proc命令产生的:

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

proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开,第三个参数是一个TCL脚本,代表过程体。proc生成一个新的命令,可以象固有命令一样调用:

%add 1 2					3

在定义过程时,你可以利用return命令在任何地方返回你想要的值。return命令迅速中断过程,并把它的参数作为过程的结果

局部变量和全局变量

% set a 4
//4
% proc sample{x}{
global a
incr a
return [expr $a+$x]}
%sample 3
//8
%set a
//5

如果我们想在过程内部引用一个全局变量的值,可以使用global命令
全局变量a在过程中被访问。在过程中对a的改变会直接反映到全局上。如果去掉语句global a,TCL会出错,因为它不认识变量a。
对于在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除,所以称为局部变量;在所有过程之外定义的变量我们称之为全局变量。
TCL中,局部变量和全局变量可以同名,两者的作用域的交集为空:局部变量的作用域是它所在的过程的内部;全局变量的作用域则不包括所有过程的内部。这一点和C语言有很大的不同.

字符串操作

因为TCL把所有的输入都当作字符串看待,所以TCL提供了较强的字符串操作功能。

format命令

//语法:
format formatstring ?vlue value...?

format命令类似于ANSIC中的sprintf函数,按formatstring提供的格式,把各个value的值组合到formatstring中形成一个新字符串返回。

%set name john											John
%set age 20												20
%set msg [format "%s is %d years old" $name $age]
john is 20 years old

scan命令

//语法:
scan string format varName ?varName...?

scan命令可以认为是format命令的逆,其功能类似于ANSIC中的sscanf函数。它按format提供的格式分析string字符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string 和format中的字符和%必须匹配。

%scan "some 26 34" "some %d %d" a b 		2
%set a										26
%set b										34

regexp命令

//语法:
regexp ?switchs??--?Exp string?matchVar?\?
subMatchVar subMatchVar...?

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

字符意义
.匹配任意单个字符
^表示从头进行匹配
$表示从末尾进行匹配
[chars]匹配字符集合chars中给出的任意字符
*对*前面的项进行单次或多次匹配
+对+前面的项进行单次或多次匹配

文件访问

TCL提供了丰富的文件操作的命令。通过这些命令你可以对文件名进行操作(查找匹配某一模式的文件)、以顺序或随机方式读写文件、检索系统保留的文件信息(如最后访问时间)。
TCL中文件名和我们熟悉的windows表示文件的方法有一些区别:在表示文件的目录结构时它使用’/’,而不是’’,

open name?access?

open命令以access方式打开文件name。返回供其他命令(gets,close等)使用的文件标识。

文件的打开方式和我们熟悉的C语言类似,有以下方式:
r只读方式打开。文件必须已经存在。这是默认方式。
r+读写方式打开,文件必须已经存在。
w只写方式打开文件,如果文件存在则清空文件内容,否则创建新的空文件。
w+读写方式打开文件,如文件存在则清空文件内容,否则创建新的空文件。
a 只写方式打开文件,文件必须存在,并把指针指向文件尾。
a+读写方式打开文件,并把指针指向文件尾。如文件不存在,创建新的空文件。

open命令返回一个字符串用于表识打开的文件。当调用别的命令(如:gets,puts,close)对打开的文件进行操作时,就可以使用这个文件标识符。TCL有三个特定的文件标识:
stdin,stdout和stderr,分别对应标准输入、标准输出和错误通道,任何时候你都可以使用这三个文件标识。
gets fileId?varName?读fileId标识的文件的下一行,忽略换行符。如果命令中有varName就把该行赋给它,并返回该行的字符数(文件尾返回-1),如果没有varName参数,返回文件的下一行作为命令结果(如果到了文件尾,就返回空字符串)。
puts?-nonewline??fileId?string puts命令把string写到fileId中,如果没有nonewline开关的话,添加换行符。fileId默认是stdout。命令返回值为一空字符串。

flush fileId 把缓冲区内容写到fileId标识的文件中,命令返回值为空字符串。
flush命令迫使缓冲区数据写到文件中。flush直到数据被写完才返回。当文件关闭时缓冲区数据会自动fiush。

proc tgrep{pattern filename}{
	set f [open $filename r]
	while{[gets $f line]}{
		if{[regexp $pattern $line]}{
			puts stdout $line
		}
	}
	close $f
}//TCL文件I/O的基本特点示例

TCL提供两个命令来管理当前工作目录:pwd和cd。
pwd和UNIX下的pwd命令完全一样,没有参数,返回当前目录的完整路径。
cd命令也和UNIX命令也一样,使用一个参数,可以把工作目录改变为参数提供的目录。如果cd没使用参数,UNIX下,会把工作目录变为启动TCL脚本的用户的工作目录。
TCL提供了两个命令进行文件名操作:glob和file用来操作文件或获取文件信息
glob命令采用一种或多种模式作为参数,并返回匹配这个(些)模式的所有文件的列表

//语法为:
glob ?switches ?pattern ?pattern...?

glob命令的模式采用string match命令的匹配规则。例如:

%glob *.c *.h 
//main.c hash.c hash.h
file delete *.tmp #不生效不执行通配符展开

先使用glob命令返回文件列表,在使用参数展开语法{*}把列表元素作为独立参数提供给指令。

file delete{*}[glob*.tmp]

也可以选择使用eval

eval file delete[glob*.tmp]

file是有许多选项的常用命令,可以用来进行文件操作也可以检索文件信息
file atime name 返回一个十进制的字符串,表示文件name最后被访问的时间。时间是以秒为单位从1970年1月1日12:00AM开始计算。如果文件name不存在或查询不到访问时间就返回错误。例:

% file atime license.txt 975945600
file copy?force??--?source target

这个命令把source中指明的文件或目录递归的拷贝到目的地址targetDir,只有当存在-force选项时,已经存在的文件才会被覆盖。试图覆盖一个非空的目录或以一个文件覆盖一个目录或以一个目录覆盖一个文件都会导致错误。

file mkdir dir?dir...?				//创建dir中指明的目录
file owned name						//如果name被当前用户拥有,返回1,否则返回0。
file executable name				//如果name对当前用户是可以执行的,就返回1,否则返回0。

这篇笔记参考众多资料整理而成,仅作学习心得交流,如果涉及侵权烦请请告知,我将第一时间处理。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vivado是一款由赛灵思(Xilinx)公司开发的综合性设计工具,用于FPGA的设计与开发。而Tcl(Tool Command Language)则是Vivado中使用的一种脚本语言,用于自动化执行一系列的命令和操作。 对于零基础的用户来说,学习Vivado/Tcl入门可以按照以下步骤进行: 1. 安装Vivado:首先,需要在电脑上安装Vivado软件。可以从Xilinx官方网站下载合适版本的Vivado,并按照安装向导进行安装。 2. 理解Vivado的基本概念:Vivado是一个功能复杂的工具,需要了解其中的基本概念和工作流程。可以阅读Vivado的官方文档和教程,了解项目、IP核、约束等概念。 3. 学习Tcl语法基础Tcl是Vivado中进行脚本编写的语言,需要学习Tcl的基本语法和结构。可以通过参考Tcl的官方文档或者在线教程,理解Tcl的变量、控制流、函数等概念。 4. 编写简单的Tcl脚本:学习Tcl语法后,可以编写一些简单的Tcl脚本来熟悉语言的使用。可以尝试定义变量、进行数值计算、使用条件语句等等。 5. 在Vivado中应用Tcl脚本:学习了Tcl基础后,可以将Tcl语言应用于Vivado工具中。可以尝试使用Tcl脚本自动创建项目、添加IP核、进行综合、实现和生成比特流等操作。 6. 提升Tcl脚本技巧:随着对Vivado和Tcl的进一步了解和实践,可以逐渐掌握更高级的Tcl编程技巧。例如,使用循环结构、使用自定义函数、调用Vivado中的API等。 通过不断的学习和实践,您可以逐渐成为一名熟练的Vivado/Tcl用户。同时,还可以查找更多的Tcl和Vivado的学习资源,如论坛、社区或相关课程,以便更深入地了解和应用这些工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字ic攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值