当前位置:   article > 正文

第10章Tcl脚本编程(二)_tcl regsub

tcl regsub

10.5 eval命令

  • 语法
    在这里插入图片描述
  • eval命令是一个用来构造和执行Tcl脚本的命令,它可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值
    在这里插入图片描述
  • eval命令按照concat风格将输入参数连接成命令字符串,然后调用Tcl_Eval来完成命令计算和执行。

10.6 source命令

  • source命令读一个文件并把这个文件的内容作为一个脚本进行求值
    在这里插入图片描述

10.7过程

10.7.1 过程定义和返回值

  • 语法
    在这里插入图片描述
  • proc命令有3个参数:procName是定义的过程名字;{var1var2 …}是输入、输出参数列表;body是过程执行命令体。
    在这里插入图片描述
  • 在定义过程时,可以利用return命令在任何地方返回你想要的值。return命令迅速中断过程,并把它的参数作为过程的结果
    在这里插入图片描述

10.7.2 局部变量和全局变量

  • 当变量只能在过程中被访问,并且在过程退出后会被自动删除时,称为局部变量
  • 在所有过程之外定义的变量称之为全局变量
  • Tcl中,局部变量和全局变量可以同名,两者的作用域的交集为空
  • 局部变量的作用域是它所在的过程的内部;
  • 全局变量的作用域则不包括所有过程的内部。
    在这里插入图片描述
  • 另外一种方式来直接使用全局变量,即用双冒号::
  • 通过双冒号::调用全局变量的方式,可以避免过程中局部变量和所要使用的全局变量同名的问题,也可以使代码更清晰。
    在这里插入图片描述

10.7.3 默认参数和可变个数参数

  • 1)可以定义一个没有参数的过程
    在这里插入图片描述
  • 2)可以定义具有默认参数值的过程,即可以为过程的部分或全部参数提供默认值,如果调用过程时未提供那些参数的值,那么过程会自动将默认值赋给相应的参数。
    在这里插入图片描述
  • 3)Tcl的过程定义还支持可变个数的参数,如果过程的最后一个参数是args,那么就表示这个过程支持可变个数的参数调用
    在这里插入图片描述

10.8引用

  • 语法
    在这里插入图片描述
  • upvar命令使得用户可以在过程中对全局变量或其他过程中的局部变量进行访问。
  • upvar命令的第一个参数otherVar是希望以引用方式访问的参数的名字,第二个参数myVar是这个过程中的局部变量的名字,一旦使用upvar命令把otherVar和myVar绑定,那么在过程中对局部变量myVar的读写就相当于对这个过程的调用者中otherVar所代表的局部变量的读写
    在这里插入图片描述
  • 一个过程A或可以被另一个过程B所调用,而过程B也可被过程C调用,那么A、B、C三个过程组成了一个调用层次,A为最低,C为较高层(global全局过程为最高)。则A就可以通过upvar命令来引用过程B、C和全局过程的变量,而不像global命令只能使用全局变量。如果level为1(默认),则表示引用相邻上一层(过程B)的参数,如果为2,则表示引用的是向上第2层(过程C)的参数。
  • level参数用法
    在这里插入图片描述
  • 访问全局变量定义
    在这里插入图片描述

10.9字符串操作

1. format命令

  • 语法
    在这里插入图片描述
  • 它按formatstring提供的格式,把各个value的值组合到formatstring中,形成一个被格式化的新字符串,并返回
  • formatstring包含了格式说明关键词和附加文字,使用%来引入一个关键词,后跟0个或者多个修饰符,然后使用一个转换格式符结尾。
  • value的参数设置主要有6种:位置说明符、标志、字段宽度、精度、长度和格式转换符。
  • 转换符说明
    在这里插入图片描述
  • format命令
    在这里插入图片描述

2. scan命令

  • 语法
    在这里插入图片描述
  • 它按format提供的格式分析string字符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string和format中的字符和“%”必须匹配
    在这里插入图片描述
  • scan命令的返回值是匹配的变量个数。而且,如果变量varName不存在的话,Tcl会自动声明该变量。

3. regexp命令

  • 语法
    在这里插入图片描述
  • regexp命令用于判断正则表达式exp是否全部或部分匹配字符串string,匹配返回1,否则0。
  • 字符具有特殊的含义
  • 案例
    在这里插入图片描述
  • 正则表达式(0x)? [0-9a-fA-F]+中,(0x)表示0x一起作为一项,?表示前一项(0x)可以出现0次或多次,[0-9a-fA-F]表示可以是任意0~9之间的单个数字或a~f或A~F之间的单个字母,“+”表示像前面那样的单个数字或字母可以重复出现一次或多次
    在这里插入图片描述
  • regexp可以设置一些开关(switchs),来控制匹配结果:
  • 1)-nocase匹配时不考虑大小写。
  • 2)-indices改变各个变量的值,这是各个变量的值变成了对应的匹配子串在整个字符串中所处位置的索引
    在这里插入图片描述
  • “–”表示这后面再没有开关(switch)了,即使后面有以“-”开头的参数也被当作正则表达式的一部分。

4. regsub命令

  • 语法
    在这里插入图片描述
  • regsub命令的第一个参数是一个正则表达式,第二个参数是一个输入字符串,这一点和regexp命令完全一样,也是当匹配时返回1,否则返回0。
  • 不过regsub用第三个参数的值来替换字符串string中和正则表达式匹配的部分
  • 第四个参数被认为是一个变量,替换后的字符串存入这个变量中
    在这里插入图片描述
    -regsub命令也有几个开关
  • 1)-nocase意义同regexp命令中。
  • 2)-all没有这个开关时,regsub只替换第一个匹配,有了这个开关,regsub将把所有匹配的地方全部替换。

5. string命令

  • 语法
    在这里插入图片描述

  • (1)string compare ? -nocase? ? -length int? string1string2

    • 把字符串string1和string2进行比较,返回值为-1、0或1,分别对应string1小于、等于或大于string2。
    • 如果有-length参数,那么只比较前int个字符,如果int为负数,那么这个参数被忽略。
      在这里插入图片描述
    • 如果有-nocase参数,那么比较时不区分大小写。
      在这里插入图片描述
  • (2)string equal ? -nocase? ? -lengthint? string1 string2

    • 把字符串string1和string2进行比较,如果两者相同,返回值为1,否则返回0。
      在这里插入图片描述
  • (3)string first string1 string2 ? startindex?

    • 在string2中从头查找与string1匹配的字符序列,如果找到,那么就返回匹配的第一个字母所在的位置;如果没有找到,那么返回-1。
    • 如果给出了startindex变量,那么将从startindex处开始查找
      在这里插入图片描述
  • (4)string last string1 string2 ? startindex?

    • last参数与first参数的唯一区别是从后往前查找。
      在这里插入图片描述
  • (5)string index string1 charIndex

    • ❑整数n:字符串中第n个字符。
    • ❑end:最后一个字符。
    • ❑end-整数n:倒数第n个字符。string index "abcd"end-1返回字符’c’。
      在这里插入图片描述
  • (6)string length string

    • 返回字符串string的长度。
      在这里插入图片描述
  • (7)string match ? -nocase? pattern string

    • 如果pattern匹配string,那么返回1,否则返回0。
    • 如果有-nocase参数,那么就不区分大小写。
    • 在pattern中可以使用通配符如下:
      • ❑匹配string中的任意长的任意字符串,包括空字符串。
      • ❑?匹配string中任意单个字符。
      • ❑[chars]匹配字符集合chars中给出的任意字符,其中可以使用A-Z这种形式。
      • ❑\x匹配单个字符x,使用’\’是为了让x可以为字符、-、[、]

在这里插入图片描述

  • (8)string range string1 first last
    • 返回字符串string1中从第first个到第last个字符的子字符串。
    • 如果first<0,那么first被看作0;
    • 如果last大于或等于字符串的长度,那么last被看作end;
    • 如果first比last大,那么返回空。

在这里插入图片描述

  • (9)string repeat string1 count
    • 返回值为重复了string1字符串count次的新字符串

在这里插入图片描述

  • (10)string replace string1 first last ? newstring?
    • 返回值为从字符串string1中删除了第first到第last个字符的新字符串,如果给出了newstring变量,那么就用newstring替换从第first到第last个字符。
    • 如果first<0,那么first被看作0;
      -如果last大于或等于字符串的长度,那么last被看作end;
      -如果first比last大或者大于字符串string1的长度或者last小于0,那么原封不动地返回string1。

在这里插入图片描述

  • (11)string tolower string1 ? first? ? last?
  • 返回值为把字符串string1转换成小写字母后的字符串,如果给出了first和last变量,就只转换first和last之间的字符。
    在这里插入图片描述
  • (12)string toupper string1 ? first? ? last?
    • 与tolower参数的唯一区别是转换成大写字母。

在这里插入图片描述

  • (13)string trim string1 ? chars?

    • 返回值是:从string1字符串的首尾删除掉了字符集合chars中的字符后的字符串。
    • 如果没有给出chars,那么将删除掉spaces、tabs、newlines、carriage returns这些字符
      在这里插入图片描述
  • (14)string trimleft string1 ? chars?

    • 与参数trim的唯一不同是只删除左边的字符。
  • (15)string trimright string1 ? chars?

    • 与参数trim的唯一不同是只删除右边的字符。

10.10文件访问

10.10.1 文件名

  • 在表示文件的目录结构时它使用’/‘,而不是’’,这和Tcl最初是在UNIX下实现有关。

10.10.2 基本文件输入/输出命令

1. open命令

  • open命令以access方式打开文件name,返回供其他命令(gets、close等)使用的文件标识。如果name的第一个字符是“—”,管道命令被触发,而不是打开文件。
  • 文件的打开方式和我们熟悉的C语言类似,有以下方式:
  • ❑r:只读方式打开文件。文件必须已经存在。这是默认方式。
  • ❑r+:读写方式打开文件,文件必须已经存在。
  • ❑w:只写方式打开文件,如果文件存在则清空文件内容,否则创建一个新的空文件。
  • ❑w+:读写方式打开文件,如文件存在则清空文件内容,否则创建新的空文件。
  • ❑a:只写方式打开文件,文件必须存在,并把文件指针指向文件尾。
  • ❑a+:读写方式打开文件,并把文件指针指向文件尾。如文件不存在,创建新的空文件。
  • Tcl有3个特定的文件标识:stdin、stdout和stderr,分别对应标准输入、标准输出和错误通道

2. gets命令

  • 语法
    在这里插入图片描述

3. read命令

  • (1)read ? -nonewline? fileId
  • (2)read fileId numBytes

4. puts命令

  • 语法
    在这里插入图片描述

5. flush命令

  • 语法
    在这里插入图片描述
  • 把缓冲区内容写到fileId标识的文件中,命令返回值为空字符串。

6. close命令

  • 语法
    在这里插入图片描述

  • 关闭标识为fileId的文件,命令返回值为一个空字符串。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/655062
推荐阅读
相关标签
  

闽ICP备14008679号