您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 原创-TclTk学习笔记
TclTk学习笔记Tcl正则Tk概要¾Tcl¾Tk2第一部分Tcl3目录¾列表¾字典¾控制¾访问¾模块4¾简介¾语法¾变量¾表达式¾字符串Tcl简介¾Tcl——ToolCommand(Control)Language¾如何进入Tcl环境?¾基于Tcl的EDA软件,如ICC、EDI、PT、DC¾命令行输入tclsh5语法:脚本、命令、单词¾Tcl脚本包含一条或更多的命令¾命令通过换行符或分号隔开¾每一条命令包含一个或多个单词¾第一个单词是命令名,其他的单词是命令的参数¾单词通过空格或制表符(Tab)隔开6seta24;setb15两个命令,分别对ab赋值语法:替换¾变量替换——由$引发,将变量的值插入¾seta20;expr$a*2→40¾命令替换——由[]引发,将命令的值插入¾seta20;setb[expr$a*2]→40¾反斜线替换——由\引发,转义字符7setx10→10setyx+100→x+100sety$x+100→10+100sety[expr$x+100]→110sety[expr$x+100;setb300]y的值是?300语法:引用¾阻止解析器对特殊字符如$等进行特殊处理¾反斜线/双引号“”大括号{}¾“”取消其中的单词和命令分隔符的特殊解释¾换行符、$、[]仍然有效¾{}取消其中所有的特殊字符的特殊解释¾比如/n,在“”中是换行,在{}中就是/n本身8语法:gets和puts¾gets从一个channel取一个行到指定变量;同时它本身也返回这个行¾getschannelId?varName?#用法1¾getsstdinName#用法2¾puts向一个channel写¾puts?-nonewline??channelId?string9?…?表示之间的内容是可选的;-nonewline表示不换行语法:参数展开¾删除所有以.o结尾的文件¾filedelete[glob*.o]¾假设[]中的结果是:a.ob.oc.o¾找不到名为“a.ob.oc.o”的文件¾正确的做法:filedelete{*}[glob*.o]¾若字符串以{*}开头,后面紧接非空白字符,Tcl会移除开头的{*}并把剩余的部分做为含有单词分隔符的语句进行处理10语法:参数展开¾evalfiledelete[glob*.o]¾setvars{abcd}evalunset$vars¾evalseta2;setb4→411eval可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值语法:注释¾Tcl使用#来表示注释¾#需要出现在Tcl命令的第一个位置才会被识别¾避免在注释中使用{},至少保证{}是成对的¾使用if来注释一段程序¾if0{……}12变量:简单变量¾使用set创建、读取、修改变量¾变量在被赋值时自动创建¾使用unset删除变量13%seta22%seta.144%setb$a.12.1%setb${a.1}注意元素名中的空格变量:数组¾数组是元素的集合¾元素是有自己的名称和值的变量¾setearnings(January)87966→87966¾setearnings(“January”)87966¾seta(bc)100×¾seta(b\c)100√14元素名不需用“”括起,否则“”会被认为是元素的一部分图示中元素名是“January”而不是january括号中不要有空格,比如seta(1,3)那么3)会被认为是单独的单词变量:多维数组¾seta(1,1)100¾seta(1,2)200¾seta(1,3)300¾seti1¾setj2¾setcell$a($i,$j)¾→20015变量:查询数组¾对一个数组变量,array可以查询其元素个数和元素名列表¾seta(1)100¾seta(2)200¾seta(3)300¾arraysizea→3¾arraynamesa→12316变量:incr和append¾incr加¾setx4;incrx5→9¾append附加¾setxhello;appendxworld→helloworld17必须是整数针对列表操作有lappend命令,详见下文变量:移除¾使用unset移除变量以及数组元素¾unseta¾unsetearnings(January)¾unsetearnings¾也可以使用arrayunset移除数组中元素18移除整个数组earnings变量:预定义变量¾argv0调用的脚本文件名称¾argv命令行参数(列表形式)¾argc命令行参数的个数¾env环境变量¾$env(HOME)用户的home目录¾Tcl_platform平台描述¾$tcl_platform(platform)→unix¾$tcl_platform(machine)→i38619表达式20表达式21表达式¾一些预定义数学函数¾abs(x)x的绝对值¾ceil(x)不小于x的昀小整数¾floor(x)不大于x的昀大整数¾rand()0到1区间的伪随机浮点数¾round(x)对x做四舍五入得到的整型值22字符串操作:获取¾stringindex¾stringindex“samplestring”3→p¾stringrange¾stringrange“samplestring”37→ples23字符串操作:长度、转换¾stringlength¾stringlength“samplestring”→13¾stringtoupper/tolower¾stringtoupper“Watchout”→WATCHOUT¾stringtolower“Watchout”→watchout24字符串操作:裁剪、重复¾stringtrim/trimleft/trimright¾stringtrimaaxxxbababc→xxx¾stringtrimleftaaxxxbababc→xxxbab¾stringrepeat¾stringrepeat“*”20→***************25字符串操作:简单搜索¾stringfirst¾stringfirstth“Thereisthexxx”→9¾stringfirstth“ThereisthetubwhereIbathedtoday”12→27¾stringlast¾反向26字符串操作:比较¾stringcompare¾stringcompareMichiganMinnesota→-1¾字符串相同:返回0¾在字典中¾第一个字符串先于第二个字符串:返回-1¾第一个字符串后于第二个字符串:返回1¾stringequal¾stringequalcatcat→1¾相同1,不同027两个命令全部区分大小写字符串操作:置换¾stringreplace¾stringreplace“SanDiego,California”48“Francisco”→SanFrancisco,California¾stringmap¾Stringmap–nocase{RESOUCE“Ms.Li”CORPORATION“Weyland-Yutani”}“DearResourCE,welcometoyourfirstdayatcorporation”→DearMs.LiwelcometoyourfirstdayatWeyland-Yutani”28字符串操作:确定类型¾stringisdigit1234→1¾stringisdigit“abc”→0¾stringiscontrol“”→1¾stringiscontrol–strict“”→029如果字符串为空,对任何类型的stringis都返回1,使用-strict可以强制在字符串为空时返回0字符串操作:创建¾format¾format“Thesquarerootof10is%.3f”[exprsqrt(10)]→Thesquarerootof10is3.16230字符串操作:匹配¾stringmatch¾stringmatcha*alpha→1¾stringmatcha*bat→0¾stringmatch{[ab]*}brown→131正则表达式¾regexp匹配¾regexp{^[0-9]+$}510→1¾regsub替换¾regsubthere“Theylivetherelives”theirx→132X的值被设置为Theylivetheirlives,语句返回值是1正则表达式:regexp¾regexp{([0-9]+)*([a-z]+)}“thereis100apples”totalnumword→1¾puts“$total,$num,$word“→100apples,100,apples¾regexp可以设置一些开关(switchs〕,来控制匹配结果:¾-nocase匹配时不考虑大小写¾-indices改变各个变量的值,这是各个变量的值变成了对应的匹配子串在整个字符串中所处位置的索引。例如:¾regexp-indices{([0-9]+)*([a-z]+)}“thereis100apples”totalnumword→1¾puts“$total,$num,$word“→920,1012,1520¾--表示这后面再没有开关(switchs〕了,即使后面有以'-'开头的参数也被当作正规表达式的一部分。33子串“100apples”的序号是9-20,100的序号是10-12,apples的序号是15-20正则表达式:regsub¾regsubthere“Theylivetherelives”theirx→1¾puts$x→Theylivetheirlives这里there被their替换了¾regsub命令开关(switchs):¾-nocase意义同regexp命令¾-all没有这个开关时,regsub只替换第一个匹配,有了这个开关,regsub将把所有匹配的地方全部替换¾--意义同regexp命令34字符集专题¾字符编码:编写语言使用的字符与计算机使用的二进制代码之间的映射。¾如ASCII,ISO8859-1(欧),Shift-JIS(日),Big5(中)¾Unicode标准是包含世界上几乎所有的主要书面语言的统一编码方案¾UTF-8是Unicode字符的标准变形格式。其用来将Unicode字符变形为变长的码值35列表¾list这个概念在TCL中是用来表示集合的。¾TCL中list是由一堆元素组成的有序集合。¾list可以嵌套定义,list每个元素可以是任意字符串,也可以是list¾{}空list¾{abcd}¾{a{bc}d}list可以嵌套36列表:创建¾list{abc}{de}f{ghi}→{abc}{de}f{ghi}¾concat{abc}{de}f{ghi}→abcdefghi¾lrepeat3a→aaa37列表:lindexllength¾lindex{abcd}2→c¾llength{abcd}→4¾lindex{a{bc}d}1→bc38注意列表是0-based,即从0开始列表:修改¾setx{ab{cd}e}¾lrange$x13→b{cd}e¾linsert$x2XYZ→abXYZ{cd}e¾lreplace$x33→ab{cd}¾lreplace$x12XYZ→aXYZe¾setx{abc}¾lappendxXX→abcXX39列表:获取\搜索¾lassign¾lassign{abc}xyz;¾puts“$x,$y,$z”→a,b,c¾lsearch¾setx{abcd}¾lsearch$xc→2¾lsearch$xe→-140-inline指定返回元素而不是元素编号列表:排序¾lsort¾lsort{1012}→1102¾lsort–integer{1012}→121041语法:lsort?options?listoptions可以是如下值:-ascii按ASCII字符的顺序排序比较.这是缺省情况。-dictionary按字典排序,与-ascii不同的地方是
本文标题:原创-TclTk学习笔记
链接地址:https://www.777doc.com/doc-4273842 .html