侧边栏壁纸
博主头像
如此肤浅博主等级

但行好事,莫问前程!

  • 累计撰写 24 篇文章
  • 累计创建 12 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录
EDA

TCL 脚本语言

如此肤浅
2023-06-06 / 0 评论 / 0 点赞 / 245 阅读 / 1,841 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-06-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

B站视频学习笔记

image-1686038997903

安装

# 安装apt包管理器(若有可跳过)
sudo apt-get update

# 安装最新版本的 tcl
sudo apt-get install tcl

# 安装完成后,验证是否安装成功
tclsh
#若安装成功,终端中会出现“%”提示符,进入Tcl的命令行模式

基础语法

  • 一个 TCL 脚本可以包含一个或多个命令。命令之间必须用换行符或分号 ; 隔开
  • TCL 每一命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或 TAB 键隔开
  • 注释:使用 # 注释。

置换

TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换。TCL置换分为以下三类。

  • 变量置换$
    TCL 解释器会将认为 $ 后面为变量名,将变量置换成它的值。
    image-1686039702222

  • 命令置换[]
    [] 内是一个独立的 TCL 语句, expr 表示求值。
    image-1686039715726

  • 反斜杠置换\
    类似于 C 语言中反斜杠的用法。换行符、空格、[、$ 等被 TCL 解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符,\t 代表 TAB,\n代表换行符。
    image-1686039993443

  • 双引号和花括号
    "":TCL 解释器对双引号中 $ 和 [] 符号会进行变量置换和命令置换。
    {}:在花括号中,所有特殊字符都将成为普通字符,TCL 解释器不会对其作特殊处理。

source 和 eval 命令

  • eval
    语法格式:eval arg arg ...
    功能:该命令是一个用来构造和执行 TCL 脚本的命令。接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。

  • source
    语法格式:source e:/tcl/hello.c(例子)
    功能:读一个文件并把这个文件的内容作为一个脚本进行求值。

变量、数组、列表

  • 变量
    变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变。

    定义:set 变量名 变量值
    取值:$变量名

    image-1686040565639

    unset:该命令从解释器中删除变量,它后面可以有任意多个参数,每个参数是一个变量名,可以是简单变量,也可以数组或数组元素。

    incr:该命令把一个变量值加上一个整数。incr 要求变量原来的值和新加的值都必须是整数。

  • 数组
    TCL 中数组可以存储很多值,通过元素名来进行检索。类似于某件事物(数组名)几种不同属性(元素名),每一种属性有其独立的值。且不能单独声明一个数组,数组只能和数组元素一起声明。

    定义:set 数组名(元素名) 值
    取值:$数组名(元素名)

    使用 array 指令可以获取数组信息。
    image-1686041315479

  • 列表
    列表是标量的有序集合。

    定义:set 列表名 {元素1 元素2 元素3 ...}
    取值:$列表名

    列表的操作命令 功能
    concat 合并两个列表
    lindex 选取列表中的某个元素(从0开始计数)
    llength 列表长度
    lappend 在列表末端追加元素
    lsort 列表排序(缺省时按照ASCⅡ码进行排序;-real:按照浮点数值大小排序;-unique:唯一化,删除重复元素)

    image-1686042265100

控制流

  • if

    if {判断条件} {
        脚本语句
    } elseif {判断条件} {
        脚本语句
    } else {
        脚本语句
    }
    

    注意:
    ① 脚本语句的 ‘{’ 一定要写在上一行,因为如果不这样,TCL 解释器会认为 if 命令在换行符处已结束,下一行会被当成新的命令,从而导致错误。
    ② 同时 if 和 { 之间应该有空格否则 TCL 解释器会把 if{ 作为一个整体命令导致出错。

  • foreach
    语法格式:foreach 变量 列表 循环主体
    image-1686126061031

  • break
    功能:结束整个循环过程,并从循环中跳出
    image-1686126233237

  • continue
    功能:仅结束本次循环
    image-1686126316769

  • while
    语法格式:while 判断语句 循环主体
    image-1686141390903

  • for
    语法格式:for 参数初始化 判断语句 重新初始化参数 循环主体

    image-1686126676734

过程函数 proc

语法格式:proc 过程名称 参数列表 过程主体
功能:类似于 C 语言中的函数。即用户自定义的功能,方便多次调用。

image-1686136649406

全局变量:在所有过程之外定义的变量。
局部变量:对于在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除。
指令 global:可以在过程内部引用全部变量。
image-1686136872136

文件访问

  • open
    语法格式:open 文件名 打开方式(r:读模式;w:写模式;…)
    功能:打开文件。

  • gets
    语法格式:gets fileId 变量名
    功能:gets 读 fileId 标识的文件的下一行,并把该行赋值给变量,并返回该行的字符数(文件尾返回 -1)

  • puts
    语法格式:puts -nonewline fileId string
    功能:puts 把 string 写到 fileId 标识的文件中,如果没有 nonewline 的话,添加换行符。fileId 默认是 stdout。

  • close
    语法格式:close fileId
    功能:关闭文件

image-1686137633445

image-1686137694250

0

评论区