Tcl脚本语言教程

Tcl脚本语言教程
Tcl脚本语言教程

Tcl教程

TCL语法

■脚本、命令和单词符号 (2)

■置换(substitution) (2)

■注释 (5)

变量

■简单变量 (5)

■数组 (6)

■相关命令 (6)

表达式

■操作数 (7)

■运算符和优先级 (7)

■数学函数 (8)

List

■list命令 (10)

■concat命令 (10)

■lindex命令 (11)

■llength命令 (11)

■linsert命令 (11)

■lreplace命令 (11)

■lrange 命令 (11)

■lappend命令 (12)

■lsearch 命令 (12)

■lsort命令 (13)

■split命令 (13)

■join命令 (13)

控制流

■if命令 (13)

■循环命令:while 、for、foreach (14)

■eval命令 (15)

■source命令 (16)

过程(procedure)

■过程定义和返回值 (16)

■局部变量和全局变量 (17)

■缺省参数和可变个数参数 (17)

■引用:upvar (18)

字符串操作

■format命令 (19)

■scan命令 (20)

1

■regexp命令

■regsub命令

■string命令

文件访问

■文件名

■基本文件输入输出命令

■随机文件访问

■当前工作目录

■文件操作和获取文件信息

错误和异常

■错误

■从TCL脚本中产生错误

■使用catch捕获错误

■其他异常

深入TCL

■查询数组中的元素

■info命令

TCL语法> 脚本、命令和单词符号

一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的:

set a 1

set b 2

set a 1;set b 2

TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。

TCL解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,TCL 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。

TCL语法> 置换(substitution)

注:在下面的所有章节的例子中,'%'为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果。'//'后面是我自己加上的说明,不是例子的一部分。

TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如:

2

%set x 10 //定义变量x,并把x的值赋为10

10

%set y x+100 //y的值是x+100,而不是我们期望的110

x+100

上例的第二个命令中,x被看作字符串x+100的一部分,如果我们想使用x的值'10' ,就必须告诉TCL解释器:我们在这里期望的是变量x的值,而非字符'x'。怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能。

TCL提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。

■变量置换(variable subtitution)

变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。例如:

%set y $x+100 //y的值是10+100,这里x被置换成它的值10

10+100

这时,y的值还不是我们想要的值110,而是10+100,因为TCL解释器把10+100看成是一个字符串而不是表达式,y要想得到值110,还必须用命令置换,使得TCL会把10+100看成一个表达式并求值。

■命令置换(command substitution)

命令置换是由[]括起来的TCL命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所代替。例如:

%set y [expr $x+100]

110

y的值是110,这里当TCL解释器遇到字符'['时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C++过程,并把'expr'和变量置换后得到的'10+110'传递给该命令过程进行处理。

如果在上例中我们去掉[],那么TCL会报错。因为在正常情况下,TCL解释器只把命令行中的第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数。

注意,[]中必须是一个合法的TCL脚本,长度不限。[]中脚本的值为最后一个命令的返回值,例如:

%set y [expr $x+100;set b 300] //y的值为300,因为set b 300的返回值为300

300

3

有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参数。

■反斜杠置换(backslash substitution)

TCL语言中的反斜杠置换类似于C语言中反斜杠的用法,主要用于在单词符号中插入诸如换行符、空格、[、$等被TCL解释器当作特殊符号对待的字符。例如:

set msg multiple\ space //msg的值为multiple space。

如果没有'\'的话,TCL会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符,于是发现set命令有多于两个参数,从而报错。加入了'\'后,空格不被当作分隔符,'multiple space'被认为是一个单词(word)。又例如:

%set msg money\ \$3333\ \nArray\ a\[2]

//这个命令的执行结果为:money $3333

Array a[2]

这里的$不再被当作变量置换符。

TCL支持以下的反斜杠置换:

Backslash Sequence Replaced By

\a Audible alert (0x7)

\b Backspace (0x8)

\f Form feed (0xc)

\n Newline (0xa)

\r Carriage return (0xd)

\t Tab (0x9)

\v Vertical tab (0xb)

\ddd Octal value given by ddd

(one, two, or three d's)

\xhh Hex value given by hh

(any number of h's)

\ newline space A single space character.

例如:

%set a \x48 //对应\xhh

H //十六进制的48正好是72,对应H

%set a \110 //对应\ddd

H //八进制的110正好是72,对应H

%set a [expr \ // 对应\newline space,一个命令可以用\newline转到下一行继续

2+3]

5

4

■双引号和花括号

除了使用反斜杠外,TCL提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就要使用双引号和花括号({})。

TCL解释器对双引号中的各种分隔符将不作处理,但是对换行符及$和[]两种置换符会照常处理。例如:

%set x 100

100

%set y "$x ddd"

100 ddd

而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义,TCL解释器不会对其作特殊处理。

%set y {/n$x [expr 10+100]}

/n$x [expr 10+100]

TCL语言教程> TCL语法> 注释

TCL中的注释符是'#','#'和直到所在行结尾的所有字符都被TCL看作注释,TCL解释器对注释将不作任何处理。不过,要注意的是,'#'必须出现在TCL解释器期望命令的第一个字符出现的地方,才被当作注释。

例如:

%#This is a comment

%set a 100 # Not a comment

wrong # args: should be "set varName ?newValue?"

%set b 101 ; # this is a comment

101

第二行中'#'就不被当作注释符,因为它出现在命令的中间,TCL解释器把它和后面的字符当作命令的参数处理,从而导致错误。而第四行的'#'就被作为注释,因为前一个命令已经用一个分号结束,TCL解释器期望下一个命令接着出现。现在在这个位置出现'#',随后的字符就被当作注释了。

变量> 简单变量

一个TCL的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。例如一个名为“1323 7&*: hdgg"的变量在TCL中都是合法的。不过为了更好的使用置换(substitution),变量名最好按C\C++语言中标识符的命名规则命名。TCL解释器在分析一个变量置换时,只

5

把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:

% set a 2

2

set a.1 4

4

% set b $a.1

2.1

在最后一个命令行,我们希望把变量a.1的值付给b,但是TCL解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是'.')之间的单词符号(这里是'a')当作要被置换的变量的名字,所以TCL解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。

当然,如果变量名中有不是字母、数字或下划线的字符,又要用置换,可以用花括号把变量名括起来。例如:

%set b ${a.1}

4

TCL中的set命令能生成一个变量、也能读取或改变一个变量的值。例如:

%set a {kdfj kjdf}

kdfj kjdf

如果变量a还没有定义,这个命令将生成变量a,并将其值置为kdfj kjdf,若a已定义,就简单的把a的值置为kdfj kjdf。

%set a

kdfj kjdf

这个只有一个参数的set命令读取a的当前值kdfj kjdf。

变量> 数组

数组是一些元素的集合。TCL的数组和普通计算机语言中的数组有很大的区别。在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中,数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标〕可以为任何字符串。例如:

set day(monday) 1

set day(tuesday) 2

第一个命令生成一个名为day的数组,同时在数组中生成一个名为monday的数组元素,并把值置为1,第二个命令生成一个名为tuesday的数组元素,并把值置为2。

6

简单变量的置换已经在前一节讨论过,这里讲一下数组元素的置换。除了有括号之外,数组元素的置换和简单变量类似。例:

set a monday

set day(monday) 1

set b $day(monday) //b的值为1,即day(monday)的值。

set c $day($a) //c的值为1,即day(monday)的值。

TCL不能支持复杂的数据类型,这是一个很大的缺憾,也是TCL受指责很多的方面。但是TCL 的一个扩展ITCL填补了这个缺憾

变量> 相关命令

■set

这个命令在3.1已有详细介绍。

■unset

这个命令从解释器中删除变量,它后面可以有任意多个参数,每个参数是一个变量名,可以是简单变量,也可以是数组或数组元素。例如:

% unset a b day(monday)

上面的语句中删除了变量a、b和数组元素day(monday),但是数组day并没有删除,其他元素还存在,要删除整个数组,只需给出数组的名字。例如:

%puts $day(monday)

can't read "day(monday)": no such element in array

% puts $day(tuesday)

2

%unset day

% puts $day(tuesday)

can't read "day(tuesday)": no such variable

■append和incr

这两个命令提供了改变变量的值的简单手段。

append命令把文本加到一个变量的后面,例如:

% set txt hello

hello

7

% append txt "! How are you"

hello! How are you

incr命令把一个变量值加上一个整数。incr要求变量原来的值和新加的值都必须是整数。

%set b a

a

% incr b

expected integer but got "a"

%set b 2

2

%incr b 3

5

表达式> 操作数

TCL表达式的操作数通常是整数或实数。整数一般是十进制的,但如果整数的第一个字符是

0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作是十六进制的。TCL的实数的写法与ANSI C中完全一样。如:

2.1

7.9e+12

6e4

3.

表达式> 运算符和优先级

下面的表格中列出了TCL中用到的运算符,它们的语法形式和用法跟ANSI C中很相似。这里就不一一介绍。下表中的运算符是按优先级从高到低往下排列的。同一格中的运算符优先级相同。

语法形式结果操作数类型

-a !a ~a 负a

非a

int,float

int,float

int

a*b a/b a%b 乘

取模

int,float

int,float

int

a+b a-b 加

int,float

int,float

a<>b 左移位

右移位

int

int

a

8

a>b a<=b a>=b 大于

小于等于

大于等于

int,float,string

int,float,string

int,float,string

a= =b a!=b 等于

不等于

int,float,string

int,float,string

a&b位操作与int

a^b位操作异或int

a|b位操作或int

a&&b逻辑与int,float

a||b逻辑或int,float

a?b:c选择运算a:int,float

表达式> 数学函数

TCL支持常用的数学函数,表达式中数学函数的写法类似于C\C++语言的写法,数学函数的参数可以是任意表达式,多个参数之间用逗号隔开。例如:

%set x 2

2

% expr 2* sin($x<3)

1.68294196962

其中expr是TCL的一个命令,语法为:expr arg ?arg ...?

两个?之间的参数表示可省,后面介绍命令时对于可省参数都使用这种表示形式。expr可以有一个或多个参数,它把所有的参数组合到一起,作为一个表达式,然后求值:

%expr 1+2*3

7

%expr 1 +2 *3

7

需要注意的一点是,数学函数并不是命令,只在表达式中出现才有意义。

TCL中支持的数学函数如下

abs( x) Absolute value of x.

acos( x) Arc cosine of x, in the range 0 to p.

asin( x) Arc sine of x, in the range -p/2 to p/2.

atan( x) Arc tangent of x, in the range -p/2 to p/2.

atan2( x, y) Arc tangent of x/ y, in the range -p/2 to p/2.

9

ceil( x) Smallest integer not less than x.

cos( x) Cosine of x ( x in radians).

cosh( x) Hyperbolic cosine of x.

double( i) Real value equal to integer i.

exp( x) e raised to the power x.

floor( x) Largest integer not greater than x.

fmod( x, y) Floating-point remainder of x divided by y.

hypot( x, y) Square root of ( x 2 + y 2 ).

int( x) Integer value produced by truncating x.

log( x) Natural logarithm of x.

log10( x) Base 10 logarithm of x.

pow( x, y) x raised to the power y.

round( x) Integer value produced by rounding x.

sin( x) Sine of x ( x in radians).

sinh( x) Hyperbolic sine of x.

sqrt( x) Square root of x.

tan( x) Tangent of x ( x in radians).

tanh( x) Hyperbolic tangent of x.

TCL中有很多命令都以表达式作为参数。最典型的是expr命令,另外if、while、for等循环控制命令的循环控制中也都使用表达式作为参数。

List > List命令

list这个概念在TCL中是用来表示集合的。TCL中list是由一堆元素组成的有序集合,list可以嵌套定义,list每个元素可以是任意字符串,也可以是list。下面都是TCL中的合法的list:

{} //空list

{a b c d}

{a {b c} d} //list可以嵌套

list是TCL中比较重要的一种数据结构,对于编写复杂的脚本有很大的帮助,TCL提供了很多基本命令对list进行操作,下面一一介绍:

list命令

语法:list ? value value...?

这个命令生成一个list,list的元素就是所有的value。例:

% list 1 2 {3 4}

1 2 {3 4}

10

语法:concat list ?list...?

这个命令把多个list合成一个list,每个list变成新list的一个元素。

List > lindex命令

语法:lindex list index

返回list的第index个(0-based)元素。例:

% lindex {1 2 {3 4}} 2

3 4

List > llength命令

语法:llength list

返回list的元素个数。例

% llength {1 2 {3 4}}

3

List > linsert命令

语法:linsert list index value ?value...?

返回一个新串,新串是把所有的value参数值插入list的第index个(0-based)元素之前得到。例:

% linsert {1 2 {3 4}} 1 7 8 {9 10}

1 7 8 {9 10}

2 {

3 4}

List > lreplace命令

语法:lreplace list first last ?value value ...?

返回一个新串,新串是把list的第firs (0-based)t到第last 个(0-based)元素用所有的value 参数替换得到的。如果没有value参数,就表示删除第first到第last个元素。例:

% lreplace {1 7 8 {9 10} 2 {3 4}} 3 3

1 7 8

2 {

3 4}

% lreplace {1 7 8 2 {3 4}} 4 4 4 5 6

1 7 8

2 4 5 6

11

语法:lrange list first last

返回list的第first (0-based)到第last (0-based)元素组成的串,如果last的值是end。就是从第first个直到串的最后。

例:

% lrange {1 7 8 2 4 5 6} 3 end

2 4 5 6

List > lappend命令

语法:lappend varname value ?value...?

把每个value的值作为一个元素附加到变量varname后面,并返回变量的新值,如果varname 不存在,就生成这个变量。例:

% lappend a 1 2 3

1 2 3

% set a

1 2 3

List > lsearch命令

语法:lsearch ?-exact? ?-glob? ?-regexp? list pattern

返回list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。-exact、-glob、-regexp是三种模式匹配的技术。-exact表示精确匹配;-glob的匹配方式和string match 命令的匹配方式相同,将在后面第八节介绍string命令时介绍;-regexp表示正规表达式匹配,将在第八节介绍regexp命令时介绍。缺省时使用-glob匹配。例:

% set a { how are you }

how are you

% lsearch $a y*

2

% lsearch $a y?

-1

List > lsort命令

语法:lsort ?options? list

这个命令返回把list排序后的串。options可以是如下值:

-ascii 按ASCII字符的顺序排序比较.这是缺省情况。

-dictionary 按字典排序,与-ascii不同的地方是:

12

(1)不考虑大小写

(2)如果元素中有数字的话,数字被当作整数来排序.

因此:bigBoy排在bigbang和bigboy之间, x10y 排在x9y和x11y之间.

-integer 把list的元素转换成整数,按整数排序.

-real 把list的元素转换成浮点数,按浮点数排序.

-increasing 升序(按ASCII字符比较)

-decreasing 降序(按ASCII字符比较)

-command command TCL自动利用command 命令把每两个元素一一比较,然后给出排序结果。

List > split命令

语法:split string ?splitChars?

把字符串string按分隔符splitChars分成一个个单词,返回由这些单词组成的串。如果splitChars

是一个空字符{},string被按字符分开。如果splitChars没有给出,以空格为分隔符。例:

% split "how.are.you" .

how are you

% split "how are you"

how are you

% split "how are you" {}

h o w { } a r e { } y o u

List > join命令

语法:join list ?joinString?

join命令是命令的逆。这个命令把list的所有元素合并到一个字符串中,中间以joinString分开。缺省的joinString是空格。例:

% join {h o w { } a r e { } y o u} {}

how are you

% join {how are you} .

how.are.you

控制流> if命令

TCL中的控制流和C语言类似,包括if、while、for、foreach、switch、break、continue 等命令。

语法:if test1 body1 ?elseif test2 body2 elseif.... ? ?else bodyn?

TCL先把test1当作一个表达式求值,如果值非0,则把body1当作一个脚本执行并返回所得

13

值,否则把test2当作一个表达式求值,如果值非0,则把body2当作一个脚本执行并返回所得值……。例如:

if { $x>0 } {

.....

}elseif{ $x==1 } {

.....

}elseif { $x==2 } {

....

}else{

.....

}

注意,上例中'{'一定要写在上一行,因为如果不这样,TCL 解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错误的结果。在下面的循环命令的书写中也要注意这个问题。书写中还要注意的一个问题是if 和{之间应该有一个空格,否则TCL解释器会把'if{'作为一个整体当作一个命令名,从而导致错误。

控制流> 循环命令

循环命令包括while、for、foreach等。

■while命令

语法为: while test body

参数test是一个表达式,body是一个脚本,如果表达式的值非0,就运行脚本,直到表达式为0才停止循环,此时while命令中断并返回一个空字符串。

例如:

假设变量 a 是一个链表,下面的脚本把a 的值复制到b:

set b " "

set i [expr [llength $a] -1]

while { $i>=0}{

lappend b [lindex $a $i]

incr i -1

}

■for命令

语法为: for init test reinit body

参数init是一个初始化脚本,第二个参数test是一个表达式,用来决定循环什么时候中断,第三个参数reinit是一个重新初始化的脚本,第四个参数body也是脚本,代表循环体。下例与上例作用相同:

14

set b " "

for {set i [expr [llength $a] -1]} {$i>=0} {incr i -1} {

lappend b [lindex $a $i] }

■foreach命令

这个命令有两种语法形式

1、foreach varName list body

第一个参数varName是一个变量,第二个参数list 是一个表(有序集合),第三个参数body 是循环体。每次取得链表的一个元素,都会执行循环体一次。下例与上例作用相同:

set b " "

foreach i $a{

set b [linsert $b 0 $i]

}

2、foreach varlist1 list1 ?varlist2 list2 ...? Body

这种形式包含了第一种形式。第一个参数varlist1是一个循环变量列表,第二个参数是一个列表list1,varlist1中的变量会分别取list1中的值。body参数是循环体。?varlist2 list2 ...?表示可以有多个变量列表和列表对出现。例如:

set x {}

foreach {i j} {a b c d e f} {

lappend x $j $i

}

这时总共有三次循环,x的值为"b a d c f e"。

set x {}

foreach i {a b c} j {d e f g} {

lappend x $i $j

}

这时总共有四次循环,x的值为"a d b e c f {} g"。

set x {}

foreach i {a b c} {j k} {d e f g} {

lappend x $i $j $k

}

这时总共有三次循环,x的值为"a d e b f g c {} {}"。

15

■break和continue命令

在循环体中,可以用break和continue命令中断循环。其中break命令结束整个循环过程,并从循环中跳出,continue只是结束本次循环。

■switch 命令

和C语言中switch语句一样,TCL中的switch命令也可以由if命令实现。只是书写起来较为烦琐。switch命令的语法为: switch ? options? string { pattern body ? pattern body ...?}

第一个是可选参数options,表示进行匹配的方式。TCL支持三种匹配方式:-exact方式,-glob 方式,-regexp方式,缺省情况表示-glob方式。-exact方式表示的是精确匹配,-glob方式的匹配方式和string match 命令的匹配方式相同(第八节介绍),-regexp方式是正规表达式的匹配方式(第八节介绍)。第二个参数string 是要被用来作测试的值,第三个参数是括起来的一个或多个元素对,例:

switch $x {

a -

b {incr t1}

c {incr t2}

default {incr t3}

}

其中a的后面跟一个'-'表示使用和下一个模式相同的脚本。default表示匹配任意值。一旦switch命令找到一个模式匹配,就执行相应的脚本,并返回脚本的值,作为switch命令的返回值。

控制流> eval命令

eval命令是一个用来构造和执行TCL脚本的命令,其语法为:

eval arg ?arg ...?

它可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。例如:

%eval set a 2 ;set b 4

4

控制流> source命令so

source命令读一个文件并把这个文件的内容作为一个脚本进行求值。例如:

source e:/tcl&c/hello.tcl

16

注意路径的描述应该和UNIX相同,使用'/'而不是'\'。

过程(procedure)> 过程定义和返回值

TCL支持过程的定义和调用,在TCL中,过程可以看作是用TCL脚本实现的命令,效果与TCL 的固有命令相似。我们可以在任何时候使用proc命令定义自己的过程,TCL中的过程类似于C 中的函数。

TCL中过程是由proc命令产生的:

例如:

% proc add {x y } {expr $x+$y}

proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开,第三个参数是一个TCL脚本,代表过程体。proc生成一个新的命令,可以象固有命令一样调用:

% add 1 2

3

在定义过程时,你可以利用return命令在任何地方返回你想要的值。return命令迅速中断过程,并把它的参数作为过程的结果。例如:

% proc abs {x} {

if {$x >= 0} { return $x }

return [expr -$x]

}

过程的返回值是过程体中最后执行的那条命令的返回值。

过程(procedure)> 局部变量和全局变量

对于在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除,所以称为局部变量;在所有过程之外定义的变量我们称之为全局变量。TCL中,局部变量和全局变量可以同名,两者的作用域的交集为空:局部变量的作用域是它所在的过程的内部;全局变量的作用域则不包括所有过程的内部。这一点和C语言有很大的不同.

如果我们想在过程内部引用一个全局变量的值,可以使用global命令。例如:

% set a 4

4

% proc sample { x } {

global a

incr a

return [expr $a+$x]

17

% sample 3

8

%set a

5

全局变量a在过程中被访问。在过程中对a的改变会直接反映到全局上。如果去掉语句global a,TCL会出错,因为它不认识变量a。

过程(procedure)> 缺省参数和可变个数参数

TCL还提供三种特殊的参数形式:

首先,你可以定义一个没有参数的过程,例如:

proc add {} { expr 2+3}

其次,可以定义具有缺省参数值的过程,我们可以为过程的部分或全部参数提供缺省值,如果调用过程时未提供那些参数的值,那么过程会自动使用缺省值赋给相应的参数。和C\C++中具有缺省参数值的函数一样,有缺省值的参数只能位于参数列表的后部,即在第一个具有缺省值的参数后面的所有参数,都只能是具有缺省值的参数。

例如:

proc add {val1 {val2 2} {val3 3}}{

expr $val1+$val2+$val3

}

则:

add 1 //值为6

add 2 20 //值为25

add 4 5 6 //值为15

另外,TCL的过程定义还支持可变个数的参数,如果过程的最后一个参数是args, 那么就表示这个过程支持可变个数的参数调用。调用时,位于args以前的参数象普通参数一样处理,但任何附加的参数都需要在过程体中作特殊处理,过程的局部变量args将会被设置为一个列表,其元素就是所有附加的变量。如果没有附加的变量,args就设置成一个空串,下面是一个例子:

proc add { val1 args } {

set sum $val1

foreach i $args {

incr sum $i

}

return $sum

}

18

add 2 //值为2

add 2 3 4 5 6 //值为20

过程(procedure)> 引用:upvar

命令语法:upvar ?level? otherVar myVar ?otherVar myVar ...?

upvar命令使得用户可以在过程中对全局变量或其他过程中的局部变量进行访问。upvar命令的第一个参数otherVar是我们希望以引用方式访问的参数的名字,第二个参数myVar 是这个过程中的局部变量的名字,一旦使用了upvar 命令把otherVar 和myVar 绑定,那么在过程中对局部变量myVar 的读写就相当于对这个过程的调用者中otherVar 所代表的局部变量的读写。下面是一个例子:

% proc temp { arg } {

upvar $arg b

set b [expr $b+2]

}

% proc myexp { var } {

set a 4

temp a

return [expr $var+$a]

}

则:

% myexp 7

13

这个例子中,upvar 把$arg(实际上是过程myexp中的变量a)和过程temp中的变量b绑定,对b的读写就相当于对a的读写。

upvar命令语法中的level参数表示:调用upvar命令的过程相对于我们希望引用的变量myVar在调用栈中相对位置。例如:

upvar 2 other x

这个命令使得当前过程的调用者的调用者中的变量other,可以在当前过程中利用x访问。缺省情况下,level的值为1,即当前过程(上例中的temp)的调用者(上例中的myexp)中的变量(上例中myexp的a)可以在当前过程中利用局部变量(上例中temp的b)访问。

如果要访问全局变量可以这样写:

upvar #0 other x

那么,不管当前过程处于调用栈中的什么位置,都可以在当前过程中利用x访问全局变量other。

19

字符串操作> format命令

因为TCL把所有的输入都当作字符串看待,所以TCL提供了较强的字符串操作功能,TCL中与字符串操作有关的命令有:string、format、regexp、regsub、scan等。

format命令

语法:format formatstring ?vlue value...?

format命令类似于ANSIC中的sprintf函数和MFC中CString类提供的Format成员函数。它按formatstring提供的格式,把各个value的值组合到formatstring中形成一个新字符串,并返回。例如:

%set name john

John

%set age 20

20

%set msg [format "%s is %d years old" $name $age]

john is 20 years old

字符串操作> scan命令

语法:scan string format varName ?varName ...?

scan命令可以认为是format命令的逆,其功能类似于ANSI C中的sscanf函数。它按format 提供的格式分析string字符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string 和format中的字符和'%'必须匹配。例如:

% scan "some 26 34" "some %d %d" a b

2

% set a

26

% set b

34

% scan "12.34.56.78" "%d.%d.%d.%d" c d e f

4

% puts [format "the value of c is %d,d is %d,e is %d ,f is %d" $c $d $e $f]

the value of c is 12,d is 34,e is 56 ,f is 78

scan命令的返回值是匹配的变量个数。而且,我们发现,如果变量varName不存在的话,TCL 会自动声明该变量。

字符串操作> regexp命令

语法:regexp ?switchs? ?--? exp string ?matchVar?\ ?subMatchVar subMatchVar...? regexp命令用于判断正规表达式exp是否全部或部分匹配字符串string,匹配返回1,否则0。

20

Tcl语言基础教程

Tcl语言参考 Tcl("Tool Command Language",即工具命令语言;Tcl念作“踢叩” "tickle" )是一种易学易用易于扩展的脚本语言,实际上包 含了两个部分:一个语言和一个库。 首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些交互程序如文本编辑器、调试器和shell。它有一个简单 的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。 其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充 (定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读 取(按钮或菜单等)。 Tcl和其他编程语言例如C不同,它是一种解释语言而非编译语言。Tcl程序由一系列Tcl 命令组成,在运行时由Tcl解释 器解释运行。 Tcl有大量的用C/C++编写的扩展用于提供Tcl本身不具有的功能。其中使用最广泛的扩展是TK,TK提供了各种OS平台下 的图形用户界面GUI(连强大的Python语言都不单独提供自己的GUI,而是提供接口适配到TK上)。另一个流行的扩展包是Exp- ect,它提供了通过终端自动执行命令的能力,例如passwd, ftp, telnet等命令驱动的外壳。

一、Tcl程序基本结构 1、基本语法 Tcl有类似于shell的语法,一条Tcl的命令串包含了一条或多条命令用换行符或分号来隔开,而每一条命令包含了一个 域(field)的集合,域使用空白(空格或TAB)分开的,第一个域是一个命令的名字,其它的是作为参数来传给它。 Tcl解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,Tcl 解释器运用规则识别出命令并把命令分 成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,Tcl 解释器会把第一个单词当作命令名,并查看这 个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过 程进行处理。 Tcl的命令名可以是内建的命令也可以是用户建的新命令,在应用程序中可用函数Tcl_CreateCommand来创建新的命令。 所有的参数作为字符串来传递,命令自己会按其所需来解释的参数的。 另外关于Tcl的注释有一个特殊的要求:'#'必须出现在Tcl解释器期望命令的第一个字符出现的地方,才被当作注释。 例如: set a 100 # Not a comment

XML基础教程试题一及答案

XML基础教程试题一及答案 一、判断题(每题2分,共10分) ( )1.最早的计算机标记语言是IBM公司研究员发明的通用标记语言(GML)。( ) 2.一个有效的XML文档肯定是格式良好的文档。 ( ) 3.在一个XML文档中,元素就是整个XML文档的骨架,因此在一个XML 文档里可以有多个根元素和子元素。 ( )4.XML文档里的元素可以嵌套,因此XML文档里的注释也能嵌套。( )5.空元素指的是元素没有内容,但可以有属性。 二、选择题(每题2分,共20分) 下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。 1.什么是XML? ( ) A. 一种标准泛用标记语言 B. 一种扩展性标识语言 C. 一种超文本标记语言 D.一种层叠样式表单是.NET托管程序的执行引擎 2.下面哪个不是HTML的优点( ) A. 跨平台.. B. 强大的信息展示能力 C. 标记可自定 D.编写简单C 3.下面哪一个标记语言产生的时间最早。( ) A.XML B.SGML C.HTML D.CML 4.XPath是什么?( ) A.XML的路径语言 B.XML的转化 C. 文档对象模型 D.XML命名空间 5.这行XML声明,声明该文档采用了什么编码标准? ( ) A. GB2312 B. ANSI C. Unicode UTF-8 D. Windows-1252 6.何谓DTD?( ) A.文档架构定义,用来验证XML B.文档类型定义,用来验证XML

C.XML文档的数据部分 D.XML文档的片断 7.何谓DOM?( ) A.XML文档 B.XML文档对象模型 C.XML模型语言 D.XML路径语言 8.采用MSXML解析器创建一个元素类型的节点,应该使用Document接口的哪个方法:( ) A.createAttribute() B.createElement() C.createCDATASection() D.getElementByTagName() 9.一个XML文档以声明开始,在声明中不可使用的属性为:( ) A.是否引用外部文件B.文件大小C.字符编码D.版本 10.关于DOM的描述错误的是( )。 A.DOM使开发者能够以编程方式读取、操作和修改XML文档 B.既能使用JavaScript进行DOM开发,而不能使用Java、C# C.W3C组织公布了DOM模型的规范,然后各个软件厂商(比如微软)再根据W3C的规范开发DOM解析器,并且提供一系列的编程API,这些API都是遵守W3C规范的 D.DOM模型是W3C组织开发出来的一个在内存中表示XML数据的线性模型 三、简答题(每题6分,共30分) 1.XML是什么,它与HTML的区别? 2.什么是DOM? 3.简述解释XSLT? 4.XML文档有哪些部分组成? 5.什么是XML文档中的元素,什么是元素的属性,请举例说明。 四、设计题(每题20分,共40分) 1. XML文档结构:

3D脚本maxscript入门教程

3D 脚本maxscript 入门教程 maxscript 入门教程 内容图文并茂,语言高度概括,文采形象生动,思路清晰可见;指出要害,抓住关键,透彻理解那些难懂的编程概念;不用担心数学基础很差,无需害怕英文单词不懂,只需初中数学知识,把英文单词作图形符号看待,拿脚本编程当文字游戏把玩。 能够提高解决问题的能力,可以降低学习脚本的门槛。 不用费力看英文帮助,何需辛苦找编程资料,减轻学习负担,节省宝贵时间!发挥自己的聪明 才智,运用科学的学习方法,首先认真学好入门教程,然后虚心 请教各位高手, 脚本编程从此不再难! 入门教程内容结构 本教程内容分为五个部分,用几个具体的例子讲解大多数的脚本操作和语法知识。一、 MAXScript 简介 1、说明什么是 MAXScript 以及它有什么功能,能给用户带来什么好处。 2、访问脚本,认识脚 本访问的界面。 二、基本操作:创建和修改简单的对象,给对象赋材质,从而引出下面的概念构造器:创建对 象的语法称为构造器; 路径名; 数据类型:它们是数字,字符串,数组。对象和类(层级树);属性和方法; 变换;函数和方法的联系;通用属性和动态属性;显示属性的函数;一些常用的方法; 三、创建和操作具有复杂关系的对象,从而引出下面的概念变量,变量和属性的关系;对象引 用:引用另外一个对象的属性值作为自己的值;数组和集合等:数组,数组和变量的关系;运 算符和表达式; 表达式:求值的规则。流程控制:选择和循环,条件选择。制作简单的动画: "at time" , 动画控制器。 四、换一角度——从大家熟悉的操作流程来学习脚本这是对前面知识的总结,前面是对语法基本概念的学习,现在是从大家操作流程的角度来学习,一纵一横,让我们对脚本有个相对全面的了解,理论和实际相互联系。有了前面的基础才好学下面的内容。 第一步:创建物体一些常用物体的创建方法。 第二步:选择物体 select 路径名,变量名引用条件选择用类和集合选择物体组 Group : 是一个虚拟对象,不是集合。

DC脚本及解释

#script for Design Compiler# Language : TCL# Usage :# 1) make sure the lib in the current directory# 2) if you... #script for Design Compiler # Language : TCL # Usage : # 1) make sure the lib in the current directory # 2) if you have the file .synopsys_dc.setup, # set synopsys_dc_setup_file 1, # if not, set synopsys_dc_setup_file 0 # 3) change Step 3 : Variables to what you want # Especially : top module name, clock name, # reset name, all files name, and period # 4) typing dc_shell-t -f run_72.tcl | tee -i run.log # #===================================================== === set synopsys_dc_setup_file 0 #----------------------------------------------------- # Step 1 : # Setting Up path and library: # If you have edited the file .synopsys_dc.setup, then you can skip over this step #----------------------------------------------------- if { $synopsys_dc_setup_file == 0} { set search_path [list /home/chanshi/dc/library/smic /home/chanshi/dc/rfid/source /home/chanshi/dc/script] set target_library {typical.db} #set target_library {CSM35OS142_typ.db}; # if you want use typical library,change to typical.db #set link_library [list {*} ram_interp_typical_syn.db ram_458_typical_syn.db typical.db] set link_library [list {*} $target_library] } #set symbol_library {csm18ic.sdb csm18io.sdb} #set synthetic_library {dw_foundation.sldb}; # Design Ware set command_log_file "command.log" #----------------------------------------------------- # Step 2 : # Compile Swithes

TCL脚本实例解读

TCL脚本实例解读 作者:杨帆、老卢 前言 Sigma的这段日子在技术方面感觉提高的方面可能就是脚本的编写吧,我感觉写一个可用的脚本,并不一定非的在于你对脚本有了多了解之后,然后再去实现一个切合实际的脚本,最主要是思路,当你对所需要使用的脚本工具有一定的理解(如:TCL),在一个实际环境,首先能有个明确的想法,想实现个具体的什么东西,怎么样的思路可以实现,大脑里具备了这些条件,就可以尝试去写一些脚本。当然了,在实现的过程中肯定会遇到这样或者那样的问题,但一般来说,基本都是一些对脚本语法以及命令不熟悉的原因造成,这些问题很好解决,可以跟熟悉脚本的同事讨论,来帮你解决当时的问题,所以,千万不要因为还没有开始,就将脚本看得非常困难,导致自己一直无法迈出第一步,其实有些东西还是比较容易实现的。所以在此将我写的几个脚本在此解读解读。 文档目的 这篇文档中所附带的脚本,主要是根据Sigma这边搭建的系统测试环境而撰写出来的,脚本内容可能与今后Sigma公司为我们所开发的系统测试脚本无关,当撰写完这几个脚本之后,各人感觉有些东西还是比较有价值的,因此本人将此脚本撰写为文档,将这些东西共享出来供大家分享、借鉴、参考,相信看完这篇文档,因该会提供很多切合实际测试的一些脚本开发思路。还有,这篇文档并非一篇解释TCL命令的文档,有许多脚本中的相关命令不熟悉的地方需要查找其它资料,部分命令只做了解释或者介绍。 感谢!:) 这些脚本的撰写过程中感谢小康同学与小井同学的帮助(很多地方错误的查找、以及提供了一些解决关键问题的命令,如果没有他们的帮助,这个脚本完成的难度就大了,有很多也是他们的功劳) 环境介绍 这里提到的环境主要介绍的是系统测试的物理网络TOP环境与逻辑网络TOP环境,因为脚本里面的内容跟这个具体环境有关: 物理网络TOP,物理网络TOP所描述的实际是所有测试PC与DUT连接的物理

驱动课程资料gec6818开发板-刷机教程v1.1-new

GEC6818开发板刷机教程 作者日期版本更新内容粤嵌2017.02.01V1.0初始版本

版权声明 本文档归属广州粤嵌通信科技股份有限公司(以下简称“粤嵌”)所有,并保留一切权利,非经粤嵌同意(书面形式),任何单位及个人不得擅自摘录本文档部分或者全部内容,违者将追究其法律责任。

目录 版权声明 (1) 目录 (2) 第一章前言 (3) 注意事项 (3) 开发板启动顺序 (3) 第二章使用fastboot烧写镜像 (4) Windows下使用fastboot烧写(推荐) (4) 安装串口工具secureCRT (4) 安装fastboot (6) 烧写Linux映像 (6) 烧写android映像 (8) Linux下使用fastboot烧写(不推荐) (11) 安装串口终端minicom (11) 安装fastboot工具 (12) 烧写Linux映像 (13) 烧写android映像 (14) 第三章使用SD卡烧写镜像 (16) 注意事项 (16) Windows下制作SD启动卡(推荐) (16) Linux下制作SD启动卡 (20) 使用SD启动卡烧写Linux映像 (23) 使用SD启动卡烧写Android映像 (24)

第一章前言 开发板的嵌入式操作系统,包含Linux和Android操作系统。我们出厂时会烧写或者固化其中一个操作系统在里面。本手册讲述如何固化嵌入式操作系统到我们的开发板中。 注意事项 我们把编译好的镜像系统文件,通过SD或者USB的下载方式,固化到板载的eMMC储存器中(ROM),以下简称为“‘刷机”。 方法一:通过fastboot工具,USB下载方式 方法二:通过SD卡方式 使用fastboot工具烧写Linux和android映像时,核心板必须存在uboot(引导程序),因为烧写时需要使用uboot上的fastboot功能, 在板子不存在uboot时,请使用SD卡烧写方式。 使用fastboot烧写时,电脑上必须存在串口接口或者拥有usb转串口模块,使其连接电脑与开发板,让电脑能够通过串口与开发板通信 开发板启动顺序 6818开发板硬件配置固定了开发板启动顺序如下: 1st:从TF卡启动 2nd:从EMMC启动 3rd:从USB启动 开发板上电后首先从TF卡启动,若SD0插入了启动卡则从SD启动;如果SD0未插卡或者插入的不是启动卡,则启动失败;然后从板载EMMC(SD2)启动,若EMMC中已经烧录固件则启动成功,否则启动失败,最后尝试从USB启动。

TCL基础教程——(4)字符串处理

TCL基础教程——(4)字符串处理 对于任何一种脚本语言来说,强大的字符串处理功能都是为人们所津津乐道的,TCL也不例外,那么究竟TCL的字符串处理有什么功能呢?下面将介绍简单模式匹配,在日后的文章中,还将介绍正则表达式。String命令 String命令实际上是一组操作字符串的命令,它的第一个变元决定了进行什么样子的操作,所有String 的命令如下:

对于我来说,常用的有如下几个方法,length,equal,match,range,first。请看下面的程序[ppcorn@localhost ppcorn]$ cat strtest.tcl #!/usr/bin/tclsh set str1 str1 set str2 str1 set str3 isstr1?

set str4 he index of str1 # print the length of str1,the value should be 4 puts [string length $str1] # print the str1 equal str2, the value should be 1 puts [string equal $str1 $str2] # print the str2 match str3, the value should be 1 puts [string match *$str1* $str3] # print the 4 to 9 of str4, the value should be index puts [string range $str4 4 9] # print the postion of first str1 in str4, the value should be 13 puts [string first $str1 $str4] [ppcorn@localhost ppcorn]$ ./strtest.tcl 4 1 1 index 13 请注意一下string match的用法,中间使用了*$str1*的用法,这里使用了模糊匹配。一共有三种进行匹配的方式

力控组态入门教程

力控组态入门教程 一、关于力控 力控是北京三维力控科技有限公司“管控一体化解决之道”产品线的总称,由监控组态软件、“软”控制策略软件、实时数据库及其管理系统、Web门户工具等产品组成。这些产品不是孤立的,力控是一个应用规模可以自由伸缩的体系结构,整个力控系统及其各个产品都是由一些组件程序按照一定的方式组合而成的。因此本指南没有专门针对具体的产品分别介绍使用方法,而是介绍所有产品的共同使用方法。 在力控中,实时数据库RTDB是全部产品数据的核心,分布式网络应用是力控的最大特点。 在力控中,所有应用(例如趋势、报警等)对远程数据的引用方法都和引用本地数据完全相同,这是力控分布式特点的主要表现。 二、力控®产品发展史1994年12月,基于16位Windows平台(以Windows3.1

为代表)的力控®版本形成。 1996年09月,基于32位Windows平台(以Windows95为代表)的力控®1.0形成。并注册了力控®商标,成为国内率先拥有自主知识产权的自动化软件品牌。 1999年06月,力控®1.2版本推出,在石油、石化等行业广泛应用。 2000年10月,力控®升级为2.0版本正式推向市场 2000年06月,被国家五部委确定为国家重点新产品 2001年06月,正式推出基于PC的控制策略生成器 2001年08月,《监控组态软件及其应用》一书正式出版 2001年12月,力控®英文版forcecontrol正式推出 2002年03月,力控®2.6版本正式推向市场 2004年10月,力控®3.6版本获科技部中小企业基金扶持项目立项 三、关于力控®PCAuto?组态生成的数据文件及应用目录说明 应用路径\doc,存放画面组态数据。 应用路径\logic,存放控制策略组态数据。 应用路径\http,存放要在Web上发布的画面及有关数据。 应用路径\sql,存放组态的SQL连接信息。 应用路径\recipe,存放配方组态数据。 应用路径\sys,存放所有脚本动作、中间变量、系统配置信息。 应用路径\db,存放数据库组态信息,包括点名列表、报警和趋势的组态信息、数据连接信息等。 应用路径\menu,存放自定义菜单组态数据。 应用路径\bmp,存放应用中使用的.bmp、.jpg、.gif等图片。 应用路径\db\dat,存放历史数据文件。 第二章力控产品功能 2.1概述: 从1993年至今,力控®监控组态软件为国家经济建设做出了应有贡献,在石油、石化、化工、国防、铁路(含城铁或地铁)、冶金、煤矿、配电、发电、制药、热网、电信、能源管理、水利、公路交通(含隧道)、机电制造等行业均有力控软件的成功力控;监控组态软件已经成为民族工业软件的一棵璀璨明星。 一直以来,北京三维力控始终有预见性地开发具有潜在应用价值的功能模块,同时认真评估用户反馈建议来改进力控®产品,使用户得到超值回报,与客户的互动合作将促进了北京三维力控的发展。力控®监控组态软件的分布式的结构保证了发挥系统最大的效率。 力控®软件以计算机为基本工具,为实施数据采集、过程监控、生产控制提供了基础平台,它可以和检测、控制设备构成任意复杂的监控系统。在过程监控中发挥了核心作用,可以帮助企业消除信息孤岛,降低运作成本,提高生产效率,加快市场反应速度。 在今天,企业管理者已经不再满足于在办公室内直接监控工业现场,基于网络浏览器的Web方式正在成为远程监控的主流,作为国产软件中国内最大规模SCADA系统的WWW 网络应用的软件,力控®为满足企业的管控一体化需求提供了完整、可靠的解决方案。 2.2 软件构成: 力控®软件包括:工程管理器、人机界面VIEW、实时数据库DB、I/O驱动程序、控制策略生成器以及各种网络服务组件等。它们可以构成如下的网络系统

TCL脚本基本语法

TCL基本语法 1语言简介 TCL缩短工具命令语言的形式。由加州大学伯克利分校的约翰Ousterhout设计它。它是一种脚本语言,由其自身的解释器,它被嵌入到开发应用程序的组合。 TCL最初在Unix平台中。后来移植到Windows,DOS,OS/2和Mac OSX。TCL非常类似于其他UNIX的shell语言,类似Bourne Shell (Sh), the C Shell (csh), the Korn Shell (sh), 和Perl。 它的目的是提供程序与其他程序,也是作为一个可嵌入的翻译相互作用的能力。虽然原来的目的是为了使程序能够进行交互,可以找到由Tcl/Tk 编写的完全成熟的应用。 1.1TCL特性 TCL的特点如下: 1、减少开发时间。 2、功能强大和简单的用户界面工具包整合传统知识。 3、一次编写,随处运行。它可以运行在Windows,Mac OS X和几乎所有的Unix平台。 4、有经验的程序员很容易上手,因为语言就是这么简单,可以在几个小时或几天学习Tcl就可以搞定。 5、可以轻松地用Tcl扩展现有的应用程序。另外,也可以包括Tcl的用C,C++或Java 来扩展Tcl,或反之亦然。 6、有一组功能强大的网络功能。 7、最后,它的开源,免费的,可以用于其他无任何限制商业应用。 2基本语法 2.1命令结构 commandName空格arguments。每条命令之间通过换行或者;隔开。例如: #设置变量foo为0 set foo 0 set bar 1;puts $bar; #设置(set 为一个Tcl命令)变量bar为1,输出(puts也是一个Tcl命令)bar 2.2注释 使用#注释,不过要注意的是下面的注释是错误的: set foo 0 #设置变量foo为0,这种注释是错误的 因为tcl解析器总是认为一条命令应该以换行或者分号结束,其他的在同一行中都认为是参数。所以正确的应该是: set foo 0 #设置变量foo为0,这种注释是正确的 set foo 0; #设置变量foo为0,这种注释是正确的

FLASH脚本基础入门讲解、按钮AS的编写、影片剪辑的AS编写

1、FLASH脚本基础入门讲解、按钮AS的编写、影片剪辑的AS编写 2010-09-26 15:49:50| 分类:AS2.0课堂| 标签:flash教程|字号大中小订阅 由于近段时间装修办公楼,网络不通,老虎学习了“FLASH脚本”文字教程。走马观花看了一遍。下载的教程不是源版,里面的插图没了,个别句子不全,还有个别例题既没讲怎么作,也没讲要达到什么效果。还有些章节没讲透。总之,老虎觉得这个教程讲得简洁,实用性较强。希望学习的朋友,根据自己的需要来取舍。(由于时间紧,有些插图等老虎有空时再插进来) 一、FLASH脚本基础入门讲解 认识“动作”面板 在Flash中,动作脚本的编写,都是在“动作”面板的编辑环境中进行,熟悉“动作”面板是十分必要的。按【F9】键调出“动作”面板,可以看到“动作”面板的编辑环境由左右两部分组成。左侧部分又分为上下两个窗口。左侧的上方是一个“动作”工具箱,单击前面的图标展开每一个条目,可以显示出对应条目下的动作脚本语句元素,双击选中的语句即可将其添加到编辑窗口。 下方是一个“脚本”导航器。里面列出了FLA文件中具有关联动作脚本的帧位置和对象;单击脚本导航器中的某一项目,与该项目相关联的脚本则会出现在“脚本”窗口中,并且场景上的播放头也将移到时间轴上的对应位置上。双击脚本导航器中的某一项,则该脚本会被固定。 右侧部分是“脚本”编辑窗口,这是添加代码的区域。可以直接在“脚本”窗口中编辑动作、输入动作参数或删除动作。也可以双击“动作”工具箱中的某一项或“脚本编辑”窗口上方的【添加脚本】工具,向“脚本”窗口添加动作。在“脚本”编辑窗口的上面,有一排工具图标,在编辑脚本的时候,可以方便适 时的使用它们的功能。 用“动作”面板的时候,可以随时点击“脚本”编辑窗口左侧的箭头按钮,以隐藏或展开左边的窗口。将左面的窗口隐藏可以使“动作”面板更加简洁,方 便脚本的编辑。 好了,动作面板就介绍这些,有个印象,不要求记住,工具栏上每个工具的作用和功能将在以后的课程中边用边熟悉。 如何编写flash中的脚本 首先,要知道编写脚本,不需要用户对AS有完全的了解! 现在要考虑的问题是,如何在你的flash中添加编写脚本?简单的说,添加脚本可分为两种:一是把脚本编写在时间轴上面的关键帧上面(注意,必须是关键桢上才可以添加脚本)。二是把脚本编写在对象身上,比如把脚本直接写在MC(影片剪辑元件的实例)上、按钮上面。 此外,大家也需要简单理解一下flash是如何执行你编写的脚本的。当你在时间轴的关键帧上添加了脚本,那么当flash运行的时候,它会首先执行这个关键桢上的脚本,然后才会显示这个关键桢上的对象。

tcl脚本进行二次开发

HyperMesh中利用Tcl脚本进行二次开发 杨国雄 上海世科嘉车辆技术有限公司

HyperMesh中利用Tcl脚本进行二次开发 Further Develop by Tcl Script Based on HyperMesh 杨国雄 (上海世科嘉车辆技术有限公司) 摘要:当代企业发展的关键是创新,本文通过对HyperMesh软件进来二次开发的两个实例—频响分析流程订制和通过Comps名自动定义单元属性,研讨了通过HyperMesh软件对企业CAE分析流程进行简化,标准化,人性化的可能性。 关键字:Tcl,二次开发,HyperMesh Abstract:Innovation is the key of contemporary enterprise's development. In this paper, 2 examples(customized frequency analysis process and automatic definition of element properties via comps name)were made by further developed of HyperMesh. The possibility of CAE analysis process be simplified, standardized and humanized with HyperMesh software was also discussed. Keyword:Tcl, Further Develop,HyperMesh 1 概述 随着各个行业对CAE技术应用的深入,企业对规范化分析流程,简化前处理等各个方面提出了需求。HyperMesh是一款功能强大的有限元前处理软件,同时还具有丰富的二次开发能力。通过二次开发为企业更好的利用HyperMesh软件提供了可能性。 2 HyperMesh二次开发简介 HyperMesh二次开发主要包括了2个层次的内容——宏命令和Tcl/Tk脚本。宏命令主要功能是定义面板按钮及对Tcl脚本的调用。Tcl/Tk脚本命令可以自定义各类窗口,程序的流程化控制,宏命令、Tcl脚本和C语言程序的关系如图1所示。本文主要讨论Tcl脚本的编写。

flash动作脚本详解(免费)

详解 一、FLASH脚本基础入门讲解 (1) 二、按钮AS的编写 (4) 三、影片剪辑的AS编写 (5) 四、动态文本框 (6) 五、影片剪辑的拖拽 (8) 六、流程控制与循环语句 (10) 七、绘图及颜色的AS的编写 (12) 八、声音AS 的编写与控制 (14) 九、时间日期的AS编写 (17) 十、点语法以及路径 (18) 十一、深入了解时间控制 (20) 十二、无条件转移 (25) 十三、变量 (29) 十四、运算符(一) (35) 十五、变量(二) (39) 十六、影片剪辑的属性 (43) 十七、再讲循环语句 (49) 十八、影片剪辑处理函数 (55) 十九、复制影片剪辑 (60) 二十、深入startDrag()与stopDrag() (63) 二十一、for循环 (67) 二十二、while与do while循环 (71) 二十三、循环语句的嵌套 (75) 二十四、组件 (77) 二十五、播放器控制与网页连接以及动画发布输出 (80) 二十六、loadV ariables命令 (81) 二十七、影片剪辑的深度 (82) 二十八、文本框 (84) 二十九、超文本标签 (85) 一、FLASH脚本基础入门讲解 认识“动作”面板 在Flash中,动作脚本的编写,都是在“动作”面板的编辑环境中进行,熟悉“动作”面板是十分必要的。 按【F9】键调出“动作”面板,可以看到“动作”面板的编辑环境由左右两部分组成。左侧部分又分为上下两个窗口。。

左侧的上方是一个“动作”工具箱,单击前面的图标展开每一个条目,可以显示出对应条目下的动作脚本语句元素,双击选中的语句即可将其添加到编辑窗口。 下方是一个“脚本”导航器。里面列出了FLA文件中具有关联动作脚本的帧位置和对象;单击脚本导航器中的某一项目,与该项目相关联的脚本则会出现在“脚本”窗口中,并且场景上的播放头也将移到时间轴上的对应位置上。双击脚本导航器中的某一项,则该脚本会被固定。 右侧部分是“脚本”编辑窗口,这是添加代码的区域。可以直接在“脚本”窗口中编辑动作、输入动作参数或删除动作。也可以双击“动作”工具箱中的某一项或“脚本编辑”窗口上方的【添加脚本】工具,向“脚本”窗口添加动作。 在“脚本”编辑窗口的上面,有一排工具图标,在编辑脚本的时候,可以方便适时的使用它们的功能。 在使用“动作”面板的时候,可以随时点击“脚本”编辑窗口左侧的箭头按钮,以隐藏或展开左边的窗口。将左面的窗口隐藏可以使“动作”面板更加简洁,方便脚本的编辑。 好了,动作面板就介绍这些,有个印象,不要求记住,工具栏上每个工具的作用和功能将在以后的课程中边用边熟悉。 如何编写flash中的脚本 首先,要知道编写脚本,不需要用户对AS有完全的了解! 现在要考虑的问题是,如何在你的flash中添加编写脚本?简单的说,添加脚本可分为两种:一是把脚本编写在时间轴上面的关键桢上面(注意,必须是关键桢上才可以添加脚本)。二是把脚本编写在对象身上,比如把脚本直接写在MC(影片剪辑元件的实例)上、按钮上面。 此外,大家也需要简单理解一下flash是如何执行你编写的脚本的。当你在时间周的关键桢上添加了脚

Spirent Testcenter 自动化测试脚本 TCL(1)

Spirent Testcenter自动化测试脚本TCL -1 基本功能 2015-06-18 浏览(69) #!/bin/sh # aTemplate.tcl exec tclsh "$0" ${1+"$@"} #----------------------------------------------------- # # #----------------------------------------------------- #引用STC API ,SpirentTestCenter.tcl的路径 source {C:ProgramFilesSpirentCommunicationsSpirentTestCenter 4.20Spirent TestCenterApplicationSpirentTestCenter.tcl} #开启日志,-logTo:日志保存路径,使用stdout为标准输出; -loglevel:可选DEBUG、INFO 、WARN 和ERROR 四种; stc::configautomationoptions -logTo "aTemplateLog.txt" -logLevel DEBUG #配置机框Ip槽位端口号 set chassisAddress "192.168.0.100" set slotPort1 "8/25" set slotPort2 "8/26" #创建一个项目

set ProjectA [stc::create project] #在项目ProjextA下创建一个发送端口和一个接收端口 set TxPort [stc::create port -under $ProjectA] set RxPort [stc::create port -under $ProjectA] set portReturn [stc::config $TxPort -location "//$chassisAddress/$slotPort1"] set portReturn [stc::config $RxPort -location "//$chassisAddress/$slotPort2"] #配置端口类型,根据实际端口类型选择参数:Ethernet10GigFiber、Ethernet100GigFiber、Ethernet40GigFiber、Ethernet10GigCopper、EthernetCopper等; set ethernetFiber(1) [stc::create "Ethernet10GigFiber" -under $TxPort -Name "ethernetFiber 1"] set ethernetFiber(2) [stc::create "Ethernet10GigFiber" -under $RxPort -Name "ethernetFiber 2"] #在发送端口下创建StreamBlock(1)

(完整版)Scratch2.0入门中文使用教程

儿童编程 SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课

4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.360docs.net/doc/816971058.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH

按键精灵教程

按键精灵可以帮你操作电脑。不需要任何编程知识就可以作出功能强大的脚本。只要您在电脑前用双手可以完成的动作,按键精灵都可以替您完成。 按键精灵官方网站是:https://www.360docs.net/doc/816971058.html,/cn/qmacro 从编程的角度看,集合一些插件的脚本编辑、调试工具。代码不公开。生成的小精灵,模式化界面,界面中有广告,以此盈利。 使用环境 操作系统:Windows 98/98SE/Me/2000/XP/2003/Vista 软件支持:支持绝大多数软件,部分网络游戏中可能失效,但可尝试"神盾"功能,提高按键精灵的兼容性 按键精灵能帮我做什么? * 网络游戏中可作脚本实现自动打怪,自动补血,自动说话等 * 办公族可用它自动处理表格、文档,自动收发邮件等 * 任何你觉得“有点烦”的电脑操作都可以替你完成 上手指南 按键精灵是一个容易上手,但精通较难的软件。第一次接触它,自然会希望尽快熟悉它,让它为您工作。但如何上手呢?我来提供一些技巧 1、试:提供了免费试用,下载试用版安装后就可体验自带的例子。 2、学:上网看按键宝典,教程、实例统统都有,不懂还可上论坛提问。 3、用:边用边学,作出自己第一个脚本,你就入门啦~ 4、精:操作电脑的不便,都用脚本来解决,你的脚本也可以越来越聪明! 什么是脚本? 脚本就是一系列可以反复执行的命令.通过一些判断条件,可以让这些命令具有一定的智能效果. 如何制作脚本? 初学者可以通过”录制”功能制作简单的脚本,还可通过”脚本编辑器”制作更加智能的脚本. 如何使用脚本? 使用步骤如下: 1. 制作脚本:按照个人需求从网上搜集脚本或者自己制作脚本。如果您的脚本是从别的地方收集的,请先把脚本文件拷贝到按键精灵文件夹下的script文件夹中,然后再运行按键精灵。 2.选择有效的窗口:建议您选择“对所有窗口有效”。如果您只需要脚本当某个窗口在前台时有效,请选择窗口名称,比如“龙族” 3.让需要执行的脚本“有效”,只有“有效”一栏中勾中的脚本才会执行。 4.进入游戏(或者其他需要使用按键精灵的软件),在需要使用脚本的时候按下脚本的“快捷键”,按键精灵就会忠实的为您工作了。 5.希望脚本暂停的时候按下中止热键,即可暂停脚本. 什么是简单游? 简单游是一个拥有上千个按键精灵游戏脚本的软件平台,是按键精灵的网络游戏版.上网看简单游 什么是按键宝典? 按键宝典是兄弟工作组提供给用户的帮助大全,包含使用手册、经典脚本、各种动画教程等等。上网看按键宝典 什么是按键小精灵?

pymol基本教学教程

简介&安装 Pymol是一个开放源码,由使用者赞助的分子三维结构显示软件,由Warren Lyford DeLano编写,并且由DeLano Scientific LLC负责商业发行。Pymol被用来创作高品质的分子(特别是生物大分子如蛋白质)三维结构。据软件作者宣称,在所有正式发表的科学论文中的蛋白质结构图像中,有四分之一是使用Pymol来制作的。 Pymol名字的来源:“Py”表示该软件基于python这个计算机语言,“Mol”则是英文分子(molucule)的缩写,表示该软件用来显示分子结构。 由于实验需要,本人正在学习该软件,在这里把学习过程记录下来,希望对有需要的朋友有所帮助。今天先来说说安装吧。 自2006年8月1日起,DeLano Scientific 对事先编译好的PyMOL执行程序(包括beta版)采取限定下载的措施。目前,只有付费用户可以取得。不过源代码目前还是可以免费下载,供使用者编译。如果你和我一样,不想为此花钱的话: 1.如果你是Windows用户,首先下载Pymol的源代码。 然后安装CygWin,并且确保正确安装以下模块: ?C++ (gcc or g++ package name) ?Python ?OpenGL ?PNG 然后在源代码目录里面依次运行:

2.如果你是Linux用户,首先确保以下东东已安装: ?Python ?Pmw ?OpenGL driver(我用的是NVdia) ?libpng ?Subversion client(下载源代码需要) 然后下载Pymol的源代码 $ mkdir pymol-src $ svn co https://https://www.360docs.net/doc/816971058.html,/svnroot/pymol/trunk/pymol pymol-src 然后进入源代码目录 # cd pymol-src 开始依次编译 # python setup.py install # python setup2.py install 拷贝执行脚本到某个$PATH,安装就搞定了 # cp ./pymol /usr/bin

Tcl脚本语言教程

Tcl教程 TCL语法 ■脚本、命令和单词符号 (2) ■置换(substitution) (2) ■注释 (5) 变量 ■简单变量 (5) ■数组 (6) ■相关命令 (6) 表达式 ■操作数 (7) ■运算符和优先级 (7) ■数学函数 (8) List ■list命令 (10) ■concat命令 (10) ■lindex命令 (11) ■llength命令 (11) ■linsert命令 (11) ■lreplace命令 (11) ■lrange 命令 (11) ■lappend命令 (12) ■lsearch 命令 (12) ■lsort命令 (13) ■split命令 (13) ■join命令 (13) 控制流 ■if命令 (13) ■循环命令:while 、for、foreach (14) ■eval命令 (15) ■source命令 (16) 过程(procedure) ■过程定义和返回值 (16) ■局部变量和全局变量 (17) ■缺省参数和可变个数参数 (17) ■引用:upvar (18) 字符串操作 ■format命令 (19) ■scan命令 (20) 1

■regexp命令 ■regsub命令 ■string命令 文件访问 ■文件名 ■基本文件输入输出命令 ■随机文件访问 ■当前工作目录 ■文件操作和获取文件信息 错误和异常 ■错误 ■从TCL脚本中产生错误 ■使用catch捕获错误 ■其他异常 深入TCL ■查询数组中的元素 ■info命令 TCL语法> 脚本、命令和单词符号 一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的: set a 1 set b 2 或 set a 1;set b 2 TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。 TCL解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,TCL 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。 TCL语法> 置换(substitution) 注:在下面的所有章节的例子中,'%'为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果。'//'后面是我自己加上的说明,不是例子的一部分。 TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如: 2