`
universsky
  • 浏览: 99287 次
文章分类
社区版块
存档分类
最新评论

脚本语言TCL教程:2

 
阅读更多

1.1 for {puts "Start"; set i 0} {$i < 2} {incr i; puts "I after incr: $i"; } { ;#:过程PROC

1. 格式:proc name args body

2. 调用方法中参数可以用花括号或者双引号包含,也可以不包含

3. puts等命令中需要置换的话,需要使用方括号

例子:012_proc.tcl

proc sum {arg1 arg2} {

set x [expr $arg1+$arg2];

return $x ;#过程返回值

}

puts " The sum of 2 + 3 is: [sum 2 3]\n\n" ;#调用过程

1.2 #puts " The sum of 2 + 3 is: [sum {2 3}]\n\n" ;#出错,提示找不到:过程PROC的参数定义

1. 过程的参数赋缺省值:proc name {arg1 {arg2 value}}

2. 过程的不确定个数的参数定义:proc name {arg1 args}

例子:013_proc.tcl

proc example {first {second ""} args} { ;#参数定义:赋缺省值和不确定个数参数定义

if {$second == ""} {

puts "There is only one argument and it is: $first";

return 1;

} else {

if {$args == ""} {

puts "There are two arguments - $first and $second";

return 2;

} else {

puts "There are many arguments - $first and $second and $args";

return "many";

}

}

}

set count1 [example ONE]

set count2 [example ONE TWO]

set count3 [example ONE TWO THREE ]

set count4 [example ONE TWO THREE FOUR]

puts "The example was called with $count1, $count2, $count3, and $count4 Arguments"

1.3 :变量的作用域

x

1. 全局变量定义:global var1

2. 局部变量:upvar x y 等同于upvar 1 x y,作用有两个:一是将上一层的x的值赋给y;二是将上一层的x的地址赋给y,于是修改y等于修改x1代表作用范围,也可为23等,不能为0

例子:014_varscope.tcl

proc SetPositive {variable value } { ;#此处variable只是一个参数名,可以修改为其他的来代替变量

upvar $variable myvar ;#此处也可写为upvar 1 $variable myvar

if {$value < 0} { set myvar [expr -$value];} else {set myvar $value;}

return $myvar;

}

SetPositive x 5;

SetPositive y -5;

puts "X : $x Y: $y\n"

proc two {y} {

upvar 1 $y z ;#此处绑定了two中的zone中的y

upvar 2 x a ;# 此处绑定了主程序中的xtwo中的a

puts "two: Z: $z A: $a"

set z 1; ;# Set z, the passed variable to 1;

set a 2; ;# Set x, two layers up to 2;

}

;# A first level proc - This will be called by the global space code.

proc one {y} {

upvar $y z ;# This ties the calling value to variable z

puts "one: Z: $z" ;# Output that value, to check it is 5

two z; ;# call proc two, which will change the value

}

one y; ;# Call one, and output X and Y after the call.

puts "\nX: $x Y: $y"

1.4 LIST结构

1. list结构下标是从零开始的,引用方式是lindex list 位置-1

2. 字符串可以使用:split 字符串分隔符拆分得到一个list,缺省分隔符是空格

3. list可以直接定义:set z [list a b]

4. foreach x $list :用以列出list中的所有项

5. llength $list :用以列出list中的项数

例子:015_list.tcl

set x "a b c"

1.5 puts "Item 2 of the list {$x} is: [lindex $x 2]\n" ;#引用listLIST项的增删改

1. []中执行的命令不会改变其中变量的值,在外面单独执行会改变其值;

2. list函数列表:

序号

函数

解释

1

concat ?arg1 arg2 ..argn

合并list

2

lappend listname ?arg1 arg2 ..argn

list后增加项

3

linsert listname index arg1 ?arg2 ..argn

list中插入项

4

lreplace listname first last ?arg1 arg2 ..argn

替代list中的项

例子:016_list.tcl

set b [list a b {c d e} {f {g h}}] ;#4项:a; b; {c d e};{f {g h}}

puts "Treated as a list: $b\n"

set b [split "a b {c d e} {f {g h}}"]

puts "Transformed by split: $b\n" ;#输出为:a b \{c d e\} \{f \{g h\}\}

set a [concat a b {c d e} {f {g h}}]

1.6 puts "Concated: $a\n" ;#concat去掉了:更多LIST相关

1. list相关的函数列表:

序号

函数

解释

1

lsearch list pattern

按照某种模式查找list中的项,返回满足条件的第一项的出现位置

2

lsort list

list排序

3

lrange list first last

list中取出一个范围的项

lsort -mode list
排列列表。
-mode : -ascii
-dictionary
acsii类似,只是不区分大小写
-integer 转化为整数再比较
-real 转化为浮点数再比较
-command command 执行command来做比较

2. 通配符列表

序号

通配符

解释

1

*

代表任意字符

2

?

代表一个字符

3

\X

转义符

4

[...]

代表一个集合

例子:017_list.tcl

set list1 [list a b c]

set bpos [lsearch $list1 b]

puts "b position : $bpos" ;#返回位置值1

set list [list {Washington 1789} {Adams 1797} {Jefferson 1801} \

{Madison 1809} {Monroe 1817} {Adams 1825} ]

set x [lsearch $list Washington*] ;#返回0

set y [lsearch $list Madison*] ;#返回3

1.7 set y [lsearch $list M*] ;#返回满足条件的:字符串函数

1.字符串函数列表

序列

函数

解释

1

string length

返回字符串的长度

2

string index

返回字符串相应位置的字符

3

string range

返回字符串中一个范围内的字符子串

例子:018_string.tcl

set string "this is my test string"

puts "There are [string length $string] characters in \"$string\""

puts "[string index $string 1] is the second character in \"$string\"" ;#返回h

puts "\"[string range $string 5 10]\" are characters between the 5'th and 10'th" ;#返回”is my ”

1.8 :更多字符串函数

1.字符串函数列表

序号

函数

解释

1

string compare string1 string2

字符串比较

返回:

-1 string1string2

0 string1string2相等

1 string1string2

2

string first string1 string2

返回string1string2中第一次出现的位置;如果string2不在string1中,返回-1

3

string last string1 string2

返回string1string2中最后一次出现的位置;如果string2不在string1中,返回-1

4

string wordstart string1 index

返回string1index处的单词的开始位置

5

string wordend string1 index

返回string1index处的单词的结束位置

6

string match pattern string1

返回string1中是否满足匹配模式pattern

匹配模式的通配符:

* :任意字符

? :单个字符

\X :转义符

[...] :字符区间,例如:[a-z]

例子:019_stringcmp.tcl

set fullpath "/usr/home/clif/TCL_STUFF/TclTutor/Lsn.17"

set relativepath "CVS/Entries"

set directorypath "/usr/bin/"

set paths [list $fullpath $relativepath $directorypath]

foreach path $paths {

set first [string first "/" $path];

set last [string last "/" $path];

;#根据开头是否是 \ 来判断是相对路径还是绝对路径

if {$first != 0} {

puts "$path is a relative path"

} else {

puts "$path is an absolute path"

}

;# If "/" is not the last character in $path, report the last word.

;# else, remove the last "/", and find the next to last "/", and

;# report the last word.

incr last;

if {$last != [string length $path]} {

set name [string range $path $last end];

puts "The file referenced in $path is $name"

} else {

incr last -2;

set tmp [string range $path 0 $last];

set last [string last "/" $tmp];

incr last;

set name [string range $tmp $last end]

puts "The final directory in $path is $name"

}

;# 如果是包含CVS,判断名字开头的大小写

if {[string match "*CVS*" $path]}{ ;#注意和lsearch格式的区分,lsearch list pattern,匹配模式是在后面

puts "$path is part of the source code control tree"

}

;#判断一个名字开头是大写还是小写字母

set comparison [string compare $name "a"]

if {$comparison >= 0} {

puts "$name starts with a lowercase letter\n"

} else {

puts "$name starts with an uppercase letter\n"

}

}

;#说明 string wordstart string wordend

set word "1 12 123"

;# 1的开始和结束位置,返回:01

puts "wordstart : [string wordstart $word 0]"

puts "wordend : [string wordend $word 0]"

;# 位置1上的空格的开始和结束位置,返回:12

puts "wordstart : [string wordstart $word 1]"

puts "wordend : [string wordend $word 1]"

;# 位置2上所在单词12的开始和结束位置,返回:24

puts "wordstart : [string wordstart $word 2]"

puts "wordend : [string wordend $word 2]"

;# 位置5上所在单词123的开始和结束位置,返回:58

puts "wordstart : [string wordstart $word 5]"

puts "wordend : [string wordend $word 5]"

;# 位置6上所在单词123的开始和结束位置,返回:58

puts "wordstart : [string wordstart $word 6]"

puts "wordend : [string wordend $word 6]"

1.9 :修改字符串函数

分享到:
评论

相关推荐

    TCL脚本语言详细教程

    ### TCL脚本语言详细教程 #### 一、TCL语法概览 TCL(Tool Command Language)是一种轻量级的脚本语言,以其简洁高效的特点广泛应用于自动化测试、配置管理等多个领域。对于初学者而言,了解TCL的基本语法是至关...

    TCL+TCL脚本语言编程+TCL语言教程

    以下是对TCL脚本语言编程和TCL语言教程的一些关键知识点的详细说明: 1. **基本语法**:TCL的语法简洁明了,以空格和换行符作为语句分隔。命令通常由关键字和参数组成,不区分大小写。例如,`puts`命令用于打印输出...

    tcl中文教程---最好的Tcl脚本语言的中文教程,值得下载

    本文将根据提供的《TCL中文教程》的部分内容,总结并详细介绍TCL脚本语言的关键知识点。 #### 二、TCL语法 TCL的语法简洁而强大,主要包括脚本结构、单词和命令等组成部分。 ##### 2.1 脚本、命令和单词符号 - **...

    tcl脚本语言的教程

    TCL(Tool Command Language)是一种解释型的、动态类型的脚本语言,由John Ousterhout教授在1988年开发。它以其简洁、易学的特点被广泛应用于各种领域,包括系统管理、网络编程、GUI开发等。下面将详细介绍TCL脚本...

    脚本语言Tcl教程.pdf

    TCL(Tool Command Language)作为一门功能强大且灵活的脚本语言,在众多领域有着广泛应用。这本教程以其独特的魅力,成为学习 TCL 语言的不二之选。 教程内容全面且系统,从 TCL 语言的基础语法讲起,细致入微地...

    TCL.zip_TCL教程_tcL学习_tcl脚本_tcl语言_脚本 tcl

    TCL(Tool Command Language)是一种强大的脚本语言,由John Ousterhout在1988年开发。它被设计为一种简洁、易学、易用的语言,主要用于系统管理、网络编程、GUI(图形用户界面)开发以及嵌入式系统的控制。TCL以其...

    TCL脚本语言培训教程(中文版)

    ### TCL脚本语言培训教程(中文版)知识点详解 #### 1. 引言 - **TCL**(Tool Command Language)是一种轻量级的解释型脚本语言,以其简洁性和易用性著称。 - **适用场景**:主要用于自动化测试、系统管理任务以及...

    TCL教程(中文).pdf

    TCL是一种轻量级的脚本语言,广泛用于自动化任务、系统管理以及嵌入式系统。这份TCL教程中文版提供了全面的学习资源,涵盖了从基础语法到高级特性的方方面面。 ### TCL语法 TCL的语法相对简洁,由脚本、命令和单词...

    TCL脚本语言基本教程

    **TCL脚本语言基本教程** TCL(Tool Command Language),一种强大且灵活的脚本语言,由John Ousterhout在20世纪80年代末创建,最初用于编写工具命令。TCL以其简单易学、语法简洁以及与其他语言的无缝集成而闻名,...

    TCL脚本语言入门教程

    TCL脚本语言入门教程 TCL(Tool Command Language)是一种高级的脚本语言,广泛应用于自动化测试、网络管理、数据库管理等领域。下面是TCL脚本语言入门教程的详细知识点总结。 一、TCL语法 TCL语法是TCL语言的...

    系统学习TCL脚本入门教程

    它最初设计用于快速开发简单的命令行工具,但随着其发展,TCL已经成为一种功能全面的脚本语言,能够处理复杂的任务,甚至可以与C++或Java等编译型语言进行集成。 运行TCL脚本需要一个TCL解释器,如ActiveTCL,它可...

    TCL脚本语言编程

    ### TCL脚本语言编程知识点详解 #### 一、TCL基本概念 **TCL全称:** Tool Command Language,是一种轻量级的脚本语言,主要用于快速开发各种自动化任务、配置管理和GUI应用。 **特点:** - **基于字符串:** 大...

    TCL脚本语言手册(很详细)

    ### TCL脚本语言手册知识点概览 #### 一、TCL基本知识 **1.1 什么是TCL** TCL(Tool Command Language)是一种轻量级的解释型脚本语言,设计初衷是为了方便用户快速地编写小型应用程序或脚本来解决各种问题。TCL...

    Tcl语言全攻略,TCL脚本语言

    Tcl(Tool Command Language,工具命令语言)是一种简单、易学、强大的脚本语言,尤其适合于快速开发和集成系统。在华为等大型科技公司中,Tcl因其灵活性和高效性,常被用于自动化测试、网络设备配置、系统管理等...

    TCL脚本语言编程.pdf

    描述与标签中的重复提及“TCL脚本语言编程.pdf”,暗示了这份文档可能是关于TCL编程的详细介绍或教程,旨在帮助读者掌握TCL语言的基础知识、高级特性以及实际应用案例。由于文档的具体内容未能完全展示,我们可以...

    TCL脚本入门教程(中文版)和TCL脚本自动生成器NSG2下载及使用说明

    总之,TCL脚本的学习和NSG2的使用是相辅相成的,通过系统学习TCL脚本入门教程(系统学习TCL脚本入门教程.doc),结合NSG2自动生成器(NSG2使用说明.doc、NSG2.jar),可以快速提升TCL编程技能,提高工作效率。

    Tcl教程资料.zip

    Tcl(Tool Command Language)是一种动态类型的脚本语言,由John Ousterhout在1988年开发,主要用于编写系统管理和应用控制脚本。它以其简洁、易学和强大的字符串处理能力而闻名。Tcl_Tk是Tcl语言的一个扩展,提供了...

    TCL 语言学习教程

    TCL(Tool Command Language)是一种高级的脚本语言,广泛应用于自动化、测试和开发领域。下面是TCL语言的学习指南,涵盖了TCL语言的基础知识、语法、特性和应用场景。 TCL语言基础 * TCL是一种解释型语言,支持多...

    Tcl详细教程(ppt)

    Tcl是一种简洁而强大的脚本语言,主要用于自动化任务、软件集成和GUI开发。Tcl/Tk教程详细地讲解了Tcl语言的语法和核心概念,同时也涵盖了面向对象编程的特性,使得学习者能够全面理解并掌握Tcl。 1. Tcl语法: ...

    tcl脚本教程入门书

    TCL,全称为Tool Command Language或Terminal Control Language,是一种解释型的脚本语言,其特点是简洁易学且功能强大。TCL的解释器是`tclsh`,它同时也是一种shell环境。由于TCL与C语言在数据类型和控制结构上有...

Global site tag (gtag.js) - Google Analytics