TCL脚本语言

1. TCL置换

1.1 变量置换

$表示变量置换
TCL解释器认为$后面为变量名,将变量置换成它的值。


在这里插入图片描述


1.2 命令置换

[ ]表示命令置换
[ ]内是一个独立的TCL语句


在这里插入图片描述
在这里插入图片描述


1.3 反斜杠置换

\表示反斜杠置换
换行符空格[$等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符。


在这里插入图片描述
在这里插入图片描述


\t表示TAB
\n表示换行符

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


1.4 其它符号

1.4.1 双引号" "

TCL解释器对双引号" "$[ ]符号进行变量置换和命令置换


在这里插入图片描述


1.4.2 花括号{}

在花括号{}中,所有特殊字符都将成为普通字符,TCL解释器不会对其做特殊处理


在这里插入图片描述


1.4.3 #注释

#表示注释


在这里插入图片描述


2.变量、数组、列表

2.1 变量

变量就是某个容器的名称,可以存储一个值。变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变

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

在这里插入图片描述


  • 打印变量XXX后跟_1,即XXX_1
    在这里插入图片描述

在这里插入图片描述


2.2 数组

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

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

在这里插入图片描述


在这里插入图片描述


  • 使用array指令获取数组信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3 列表

列表是标量的有序集合

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

在这里插入图片描述


TCL中有一系列十分方便的列表操作命令

命令功能
concat合并两个列表
lindex选取列表中的某个元素
llength列表长度
lappend在列表末端追加元素
lsort列表排序

2.3.1 列表指令concat
  • 语法格式:concat 列表1 列表2
  • 功能:将列表1和列表2合并
    在这里插入图片描述

  • concat 后面接3个list
    在这里插入图片描述
    在这里插入图片描述

2.3.2 列表指令llength
  • 语法格式:llength 列表
  • 功能:返回列表中的元素个数

在这里插入图片描述


在这里插入图片描述


2.3.3 列表指令lindex
  • 语法格式:lindex 列表 n
  • 功能:返回列表中的第n个元素(从0开始计数)

在这里插入图片描述


  • 获取列表中的最后一个元素

在这里插入图片描述


2.3.4 列表指令lappend
  • 语法格式:lappend 列表 新元素
  • 功能:列表末尾加入新元素
    在这里插入图片描述
    在这里插入图片描述

  • lappend一个列表

在这里插入图片描述


  • 访问{bufx1 bufx2 bufx3}

在这里插入图片描述


2.3.5 列表指令lsort
  • 语法格式:lsort 开关 列表
  • 功能:将列表按照一定规则排序
  • 开关:默认按照ASCII码进行排序,
    -real 默认按照浮点数值大小进行排序
    -unique 唯一化,删除重复元素

  • 按照ASCII码排序

在这里插入图片描述


  • 按照数字大小排序

在这里插入图片描述


  • 唯一化

在这里插入图片描述


  • 如何得到列表中的最小值

在这里插入图片描述


2.4 运算

运算ValueValueValueValue
数学运算a+ba-ba*ba/b
逻辑运算a<=ba>=ba==ba!=b

2.4.1 数学运算指令expr
  • 语法格式:expr 运算表达式
  • 功能:将运算表达式求值

默认运算结果是整数型。如果想要进行浮点运算,只要将其中任意一个数值,写成浮点形式(有小数点)即可
在这里插入图片描述


3. 控制流

3.1 控制流if

在这里插入图片描述


注意,脚本语句的{一定要写在上一行,因为如果不这样,TCL解释器会认为命令在换行符处已结束,下一行会被当成新的命令,从而导致错误
在这里插入图片描述


  • 例子:判断列表{0 1 2 3 4 5 6} 长度是大于6.还是等于6,还是小于6
    在这里插入图片描述

3.2 循环指令foreach

  • 语法格式:foreach 变量 列表 循环主体
  • 功能:从第0个元素开始,每次按顺序取得列表的一个元素,将其赋值给变量,然后执行循环主体一次,直到列表最后一个元素
    在这里插入图片描述

3.3 循环控制指令break

  • 语法格式:break
  • 功能:结束整个循环过程,并从循环中跳出
    在这里插入图片描述
    在这里插入图片描述

3.4 循环控制指令continue

  • 语法格式:continue
  • 功能:仅结束本次循环
    在这里插入图片描述

3.5 循环控制指令while

  • 语法格式:while 判断语句 循环主体
  • 功能:如果判断语句成立(返回值非0),就运行脚本,直到不满足判断条件停止循环,此时while命令中断并返回一个空字符串。
    在这里插入图片描述

3.6 循环控制指令for

  • 语法格式:for 参数初始化 判断语句 重新初始化参数 循环主体
  • 功能:如果判断语句返回值非0就进入循环,执行循环主体后,再重新初始化参数。然后再次进行判断,直到判断语句返回值为0,循环结束。
    在这里插入图片描述
    在这里插入图片描述

4. 过程函数

4.1 过程函数proc

  • 语法格式:proc 函数名 参数列表 函数主体
  • 功能:类似于C语言中的函数。即用户自定义的功能,方便多次调用
    在这里插入图片描述

4.2 全局变量与局部变量

  • 全局变量:在所有过程之外定义的变量

  • 局部变量:对于在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除。

  • 指令global,可以在过程内部引用全部变量
    在这里插入图片描述
    在这里插入图片描述


5. 正则匹配

  • 定义:正则表达式是一种特殊的字符串模式,用来去匹配符合规则的字符串
    • 正则表达式的\w,用来匹配一个字母、数字、下划线
    • 正则表达式的\d。用来匹配一个数字
字符串abc123
正则表达式\w\w\w\d\d\d

5.1 正则匹配-量词

\w\w\w\d\d\d这种写法过于繁琐,我们可以用代替重复的量词进行表示。在TCL中常用一下三种量词

符号功能
*零次或多次匹配
+一次或多次匹配
零次或一次匹配

字符串abc123
正则表达式\w+\d+ \w*\d*

*+的区别:*可以是零次,+至少是一次

字符串abc123
正则表达式\d*\w*\d*
错误的正则表达式\d+\w+\d+(❌)

?表示零次或者一次匹配

正则表达式\w?\w?\d\d\w\w\d\d
字符串12ab34
字符串ab12ab34

5.2 正则匹配-锚位

锚位,用来指示字符串当中的开头和结尾的位置,使我们能够匹配到正确的字符

符号功能
^字符串开头
$字符串结尾

123abc123

  • ^/d/d/d表示取前三个数字
  • /d/d/d$表示取后三个数字

5.3 正则匹配-其他字符

常用的其他字符还有\s.
\s表示空格

字符串123 abc 123
正则表达式\d+\s\w+\s\d+

.表示任意一个字符,我们不确定具体是什么字符是就可以用.表示,

例如已知字符串为”xxx空格xxx空格xxx”(x为未知字符),用.+\s.+\s.+就可以匹配


5.4 正则匹配指令 regexp

语法格式regexp? switches? exp string? matchVar? ?subMatchVar subMatchVar...?
功能在字符串中使用正则表达式匹配

语法格式功能
switches-nocase将字符串中的大写都当成小写看待
exp正则表达式
string用来进行匹配的字符串
matchstring表示用正则表示式匹配的所有字符串
sub1表示正则表达式中的第一个子表达式匹配的字符串
sub2表示正则表达式中的第二个子表达式匹配的字符串

匹配字符串"abc456"regexp {\w+\d+} "abc456"

在这里插入图片描述


匹配一个以数字开头并且以数字结尾的字符串regexp {^\d.*\d$} "1 dfsal 1"

在这里插入图片描述


5.5 捕获变量

  • 通过( )可以捕获字符;例如如何将字符串"Snow is 30 years old"中30捕获出来?

在这里插入图片描述


  • 一次捕获多个字符串;例如如何将字符串“Snow is 30 years oldSnow30一次捕获?

在这里插入图片描述


6.文本处理

用TCL处理文本在工作中十分常用,主要掌握以下三个指令
opengetsclose


6.1 open

  • 语法格式:open 文件 打开方式 (打开方式r表示模式,w表示写模式)
  • 功能:打开文件

6.2 gets

  • 语法格式:gets fileld 变量名

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


6.3 close

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

6.4 举例

6.4.1 例1

在这里插入图片描述


在这里插入图片描述


6.4.2 例2

在这里插入图片描述


6.4.3 例3
  • 写一TCL脚本求出所有Slack值之和

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Tcl是一种脚本语言,称为“Tool Command Language”,旨在为任何应用程序提供可配置的命令shell。这种语言最初是为Tcl / Tk(用于图形用户界面的工具包)而设计的,但它已经变得更加通用,并且已经被广泛应用于许多不同的领域,包括Web开发,测试自动化,网络编程和数学建模。 Tcl语言最重要的特点是其简洁性和易学性。它具有类似于C语言的语法结构,并支持所有常见的编程构造,如条件语句,循环语句和函数调用。从语法上讲,它非常灵活和简单,消除了大多数其他编程语言所存在的复杂性。 Tcl语言中最重要和流行的特性是其命令shell。它允许用户输入自己的命令,并通过Tcl解释器进行解释。此外,Tcl还支持正则表达式和其他高级功能,如自定义数据类型和面向对象编程。 最重要的是,Tcl是一个开放源代码项目,并且有一个充满活力的社区,其中拥有许多优秀的库和资源。这些库支持程序员在编程期间的不同需求,例如界面开发,图像处理,网络编程和数据库访问等。 总的来说,Tcl是一种快速,易用和灵活的编程语言,非常适合初学者和专业程序员的需求。它可以应用于各种需求,从简单的文本处理到复杂的网络应用,使其成为一个非常优秀的编程语言。 ### 回答2: TCL(Tool Command Language)是一种脚本语言,主要应用于科研、工程设计、生产制造等领域,被广泛应用于自动化、测试、调试、GUI、Web开发等方面。下面对TCL脚本语言作详细介绍。 1.TCL语言基础 TCL语言的基础包括:变量、表达式、循环、分支等。 其中,变量是存储数据的最基本单元,可存储数字、字符串等;表达式是由变量、常量、运算符组成的语句;循环是控制语句,包括while语句、for语句等;分支语句是根据不同的条件进行分别处理,常见的分支语句有if语句、switch语句。 2.TCL命令 TCL命令分为内建命令和自定义命令。内建命令就是TCL语言自带的命令,如set、if、proc、while等;而自定义命令是由用户自行编写的命令。 3.TCL模块 TCL模块是一组一起使用的命令脚本,可以大大提高代码的复用性,同时提高代码的可读性和维护性。 4.TCLTCL库是预定义的一组脚本,功能比较强大,通常包含多个模块,可以被其他脚本进行调用。 5.TK工具包 TK工具包是TCL的一个框架,用于开发GUI界面,其中主要包括几何布局、标准控件、自定义控件、事件处理等功能。 6.TCL程序设计 TCL程序设计要求开发者有较高的编程能力,包括对变量/表达式/循环/分支等TCL语言基础的掌握,熟悉TCL命令、模块、库和TK工具包,以及具备高效的程序设计能力。 总之,TCL脚本语言在科研、工程设计、生产制造等领域有着广泛的应用,TCL语言基础、命令、模块、库、TK工具包以及TCL程序设计都是TCL脚本语言的重点和难点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值