首页 > 其他分享 >数字IC——TCL语言2

数字IC——TCL语言2

时间:2024-07-19 09:59:15浏览次数:16  
标签:set 匹配 数字 puts TCL 循环 file IC

(接上一篇)http://t.csdnimg.cn/eChQlicon-default.png?t=N7T8http://t.csdnimg.cn/eChQl

目录

三、控制流

四、过程函数

五、正则匹配

六、文本处理


 三、控制流

  • if 条件判断语句

新建test.tcl文件,写入以下内容:

set a 3
set b 2
if {$a > $b} {
    puts $a
    } else {
    puts $b
    }

注意事项:‘{’一定要写在上一行,否则TCL解释器会将其当作下一行的新命令,从而导致错误

然后在terminal中输入以下命令,就可得到结果3。

tclsh test.tcl

  • foreach 循环控制指令
foreach 变量 列表 循环主体

从第0个元素开始,顺序取得列表的一个元素,将其赋值给变量,执行循环主体一次。

set list {1 2 3}
foreach i $list {
    puts $i
}

程序执行过程为:将列表中的第0个元素1赋值给i,进入循环,打印i值为1;将列表中的第1个元素赋值给i,……


  • break 循环结束指令
set list {1 2 3}
foreach i $list {
    if {$i == 2} {
    break
}
    puts $i
}

i为2时,跳出foreach循环 


  • continue 退出本次循环指令
set list {1 2 3}
foreach i $list {
    if {$i == 2} {
    continue
}
    puts $i
}

 当i为2时,跳出本次循0环,将列表中第2个元素3(从0开始数)赋值给i,打印i值为3。


  • while 循环控制指令
while 判断语句 循环主体

如果判断语句成立(返回值非0),执行循环主体,直到不满足判断条件,返回空字符串。

set i 3
while {$i > 0} {
    puts $i
    set i [expr $i -1]//或者写成incr i -1
}

……,当i为1时,i减1后为0,循环结束 。


  • for 循环控制指令
for 参数初始化 判断语句 重新初始化参数 循环主体

 如果判断语句成立(返回值非0),执行循环主体,重新初始化参数,再进行判断,直到不满足判断条件,返回空字符串。

for {set i 3} {$i > 0} {incr i -1} {
    puts $i
}

其中{set i 3}是初始化语句,{$i>0}是判断语句,{incr i-1}是重新初始化参数,puts $i是循环主体。

四、过程函数

  • proc 过程函数

相当于C语言中的函数,用户自定义方便调用。

proc 函数名 参数列表 函数主体

定义一个加法函数:

//函数定义
proc add {a b} {
    set sum [expr $a + $b]
    return $sum
}

//函数调用
% add 13 14
27

和C语言中一样,TCL语言中也有全局变量和局部变量

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

局部变量:在过程中定义的变量,只有在过程中可以被访问。

想要在过程中引用全局变量,可采用global指令。

set a 1
proc sample {x} {
    global a
    set a [expr $a + 1]
    return [expr $a + $x]
}

五、正则匹配

定义: 正则表达式是一种特殊的字符串模式,用来去匹配符合规则的字符串。

\w:匹配字母、数字、下划线。

\d:匹配数字。

\s:匹配空格。

.(点):匹配任意一个字符。

用代替重复的量词进行表示

 例1:abc123

正则表达式:\w+\d+或者\w\d

例2:×××空格×××

正则表达式:.+\s.+


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


  • 正则匹配指令——regexp
regexp switches exp string

switches:-nocase将字符串中大写当成小写看待。

exp:正则表达式。

string:用来进行匹配的字符串。

% regexp {\w+\d+} "abc123"
1
% regexp {^\d.*\d$} "1 I Love TCL 2"
1

  • 捕获字符串使用小括号( )
% regexp {\s(\d+).*} "Lihua is 15 years old" total age
1
//total捕获的是{}的内容
% puts $total
15 years old
//age捕获的是()的内容
% puts $age
15

六、文本处理

TCL文本处理的主要指令:opengetsclose

  • 语法格式

open file 打开方式(r:读模式,w:写模式) 

功能:打开文件

 gets file 变量名

功能:逐行读file文件,返回该行的字符数

 close file

功能:关闭文件

 

例1:读入文件的过程 

set INPUTFILE [open file.txt r]
while {[gets $INPUTFILE line] >= 0} {
    puts "$line"
}
close $INPUTFILE

例2: 写入文件的过程

set OUTPUTFILE [open file.txt w]
puts $OUTPUTFILE "I Love TCL"
close $OUTPUTFILE

例3:现有file.txt,写出求Slack之和的TCL脚本 

file.txt

slack = -0.10

slack = -0.15

slack = -0.20

set sum 0
set INPUTFILE [open file.txt r]
while {[gets $INPUTFILE line] >= 0} {
    if {[regexp {^slack\s+=\s+(-?\d+\.?\d+)}]} $line total slack]} {
        set sum [expr $sum + $slack]
        }
}
close $INPUTFILE
puts $sum

标签:set,匹配,数字,puts,TCL,循环,file,IC
From: https://blog.csdn.net/lbyNO_1/article/details/140525191

相关文章

  • Python 文件操作与管理:Open函数、Json与Pickle、Os模块
    1.open函数的使用Python中的open()函数是处理文件的标准方法。它允许你打开一个文件,并对其进行读取、写入或追加操作open(file,mode,encoding)函数的格式:file:文件路径mode:打开方式(读:r写:w读完之后光标停留在最后读取的位置......
  • 论文《AdaLoRA: Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning》
    在大模型微调的理论中,AdaLoRA方法是一个绕不开的部分。 这篇论文主要提出了一种新的自适应预算分配方法AdaLoRA,用于提高参数高效的微调性能。AdaLoRA方法有效地解决了现有参数高效微调方法在预算分配上的不足,提高了在资源有限情况下的模型性能,为NLP领域的实际应用提供了新的......
  • C#开发:PowerDesigner建表和Navicat导入数据
    一、打开Powerdesigner,新建一个模型,点击ok二、用工具面板拖拽出一个数据表 (如果没有工具面板,请在如下操作中开启) 三、双击刚刚的拖拽出来的表,设计表的字段,可以添加注释说明 【备注】PFM:主键、外键、不可为空四、自动生成sql,然后去执行一遍这个建表语法主键自......
  • PHP由mb_strpos与mb_substr执行差异导致的小trick
    前言这个其实不算啥大洞,主要是我遇到两次了,第一次是在黄河流域做那个题的时候,还有一次是ctfshow西瓜杯的题,做到了gxngxngxn师傅出的套皮。就以这道ezphp入手吧。分析&EXP一看传参传个gxngxngxn就能读/etc/passwd,事实也的确如此。但是我们显然是要做到打这个反序列化做到任意......
  • SciTech-Mathmatics-Statistics-NumPy and Statistics: Descriptive Statistics
    StatisticsFromNumPyOfficialDocs.https://numpy.org/doc/stable/reference/routines.statistics.htmlOrderstatisticsnumpy.percentilenumpy.percentile(a,q,axis=None,out=None,overwrite_input=False,method='linear',keepdims=False,*,weig......
  • 解决BHG:no labels found in detect set, can not compute metrics without labels
    背景:在用yolov8训练别的数据集时,出现“nolabelsfoundindetectset,cannotcomputemetricswithoutlabels”问题。数据集格式:解决方法:在ultralytics\data\dataset.py中找到img2label关键词,并跳转到utils.py文件。修改这段代码的绿色部分(images/labels):(如我所使用的......
  • MATH1041 Statistics for Life
    MATH1041 Statistics for Life and Social SciencesTerm 2, 2024MATH1041 AssignmentData:  Together with this document, you should have received your unique dataset in an e-mail sent to your  official university email address. The......
  • stm32 - IIC
    目录STM32-IIC1.基本概念2.引脚说明SDASCK/SCL3.传输方向4.通信过程1.空闲状态2.开始信号3.数据发送4.应答信号5.数据接收6.停止信号STM32-IIC1.基本概念半双工同步通信的串行通信接口2.引脚说明SDASCK/SCLIIC总线只需要两根引脚就可以实现通信,一根是数......
  • Java中interface的default和static方法
    Java中interface的default和static方法Java中interface的default和static方法完整代码及其运行结果从Java8开始:static方法:接口不能通过实例调用static方法接口中的static方法不能被继承子类不能继承接口的static方法,可以继承、不能覆写父类的static方法。default......
  • mormot2 IDocList&IDocDict
    mormot2IDocList&IDocDictusesmormot.core.variantsmormot2模仿PythonListsandDictionariesJSON操作,封装了IDocList&IDocDict俩个新的接口。IDocList(别名IDocArray)存储alistofelements;IDocDict(别名IDocObject)存储adictionaryofkey:valuepairs.例程一......