文档库 最新最全的文档下载
当前位置:文档库 › tcl脚本语言中文详解

tcl脚本语言中文详解

tcl脚本语言中文详解
tcl脚本语言中文详解

T C L用法祥述

一TCL语法

1 脚本、命令和单词符号

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

set a 1

set b 2

set a 1;set b 2

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

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

2 置换(substitution)

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

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

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

1) 变量置换(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看成一个表达式并求值。

2) 命令置换(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]

3 注释

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解释器期望下一个命令接着出现。现在在这个位置出现'#',随后的字符就被当作注释了。

二变量

1 简单变量

一个TCL的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。例如一个名为“1323 7&*: hdgg"的变量在TCL中都是合法的。不过为了更好的使用置换(substitution),变量名最好按C\C++语言中标识符的命名规则命名。TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:

% 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。

2 数组

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

set day(monday) 1

set day(tuesday) 2

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

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

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填补了这个缺憾。

3 相关命令

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

% 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

三表达式

1 操作数

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

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

2.1

7.9e+12

6e4

3.

2 运算符和优先级

下面的表格中列出了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

ab a<=b a>=b 小于

大于

小于等于

大于等于

int,float,string

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

3 数学函数

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.

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

1 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 ? value value...?

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

% list 1 2 {3 4}

1 2 {3 4}

2 concat命令

语法:concat list ?list...?

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

3 lindex命令

语法:lindex list index

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

% lindex {1 2 {3 4}} 2

3 4

4 llength命令

语法:llength list

返回list的元素个数。例

% llength {1 2 {3 4}}

3

5 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}

6 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

7 lrange命令

语法: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

8 lappend命令

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

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

% lappend a 1 2 3

1 2 3

% set a

1 2 3

9 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

10 lsort命令

语法:lsort ?options? list

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

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

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

(1)不考虑大小写

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

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

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

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

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

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

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

11 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

12 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

五控制流

1 if命令

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

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

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

if { $x>0 } {

.....

}elseif{ $x==1 } {

.....

}elseif { $x==2 } {

....

}else{

.....

}

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

2 循环命令

循环命令包括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也是脚本,代表循环体。下例与上例作用相同:

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 {} {}"。

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命令的返回值。

3 eval命令

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

eval arg ?arg ...?

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

%eval set a 2 ;set b 4

4

4 source命令

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

source e:/tcl&c/hello.tcl

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

六过程(procedure)

1过程定义和返回值

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]

}

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

2 局部变量和全局变量

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

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

% set a 4

4

% proc sample { x } {

global a

incr a

return [expr $a+$x]

}

% sample 3

8

%set a

5

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

3 缺省参数和可变个数参数

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

}

则:

add 2 //值为2

add 2 3 4 5 6 //值为20

4 引用: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。

七字符串操作

1 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

2 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

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

TCL语言及其文件的认识、理解和编辑

TCL语言及其文件的认识、理解和编辑 欢迎大家指正和补充。 Tcl语法简介 Tcl是用于工具命令语言的一个解释器。它由作为基本命令解释器嵌入到工具(比如编辑器、调试器等)中的一个库包组成。Tcl提供了(a)用于简单的文本命令语言的分析器,(b)一组内置的实用命令,和(c)一个C 接口,工具通过它用特定于工具的命令增加内置命令。Tcl在与窗口组件库整合的时候特别有吸引力:它通过了提供变量、过程、表达式等机制增进了组件的可编程性;它允许用户编程组件的外观和动作二者;并且它在交互式程序之间提供一个简单但强力的通信机制 作为一种脚本语言,Tcl具有简单的语法 Tcl/Tk 的发明人John Ousterhout 教授在八十年代初,是伯克利大学的教授。在其教学过程中,他发现在集成电路CAD 设计中,很多时间是花在编程建立测试环境上。并且,环境一旦发生了变化,就要重新修改代码以适应。这种费力而又低效的方法,迫使Ousterhout 教授力图寻找一种新的编程语言,它即要有好的代码可重用性,又要简单易学,这样就促成了Tcl (Tool Command Language) 语言的产生。 Tcl最初的构想的是希望把编程按照基于组件的方法(component approach),即与其为单个的应用程序编写成百上千行的程序代码,不如寻找一个种方法将程序分割成一个个小的, 具备一定“完整”功能的,可重复使用的组件。这些小的组件小到可以基本满足一些独立的应用程序的需求,其它部分可由这些小的组件功能基础上生成。不同的组件有不同的功能,用于不同的目的。并可为其它的应用程序所利用。当然, 这种语言还要有良好的扩展性, 以便用户为其增添新的功能模块。最后,需要用一种强的,灵活的“胶水”把这些组件“粘”合在一起, 使各个组件之间可互相“通信”,协同工作。程序设计有如拼图游戏一样,这种设计思想与后来的Java 不谋而合。终于在1988 年的春天, 这种强大灵活的胶水- Tcl语言被发明出来了。 按照Ousterhout 教授的定义,Tcl是一种可嵌入的命令脚本化语言(Command Script Language)。“可嵌入”是指把很多应用有效,无缝地集成在一起。“命令”是指每一条Tcl 语句都可以理解成命令加参数的形式: 命令[参数1] [参数2] [参数3] [参数4] ...... [参数N] 脚本化是指Tcl为特殊的,特定的任务所设计。但从现在角度看,可以说Tcl是一种集C 语言灵活强大的功能与BASIC 语言易学高效的风格于一身的通用程序设计语言。 Tk (Tool Kit) 是基于Tcl的图形程序开发工具箱, 是Tcl的重要扩展部分。Tk 隐含许多C/C++ 程序员需要了解的程序设计细节, 可快速地开发基于图形界面Windows 的程序。据称, 用Tcl/Tk 开发一个简单的GUI 应用程序只需几个小时, 比用C/C++ 要提高效率十倍。需要指明的是这里所说的“窗口”是指Tcl定义的窗口,与X-Windows 与MS Windows 的定义有所不同,但它可完美地运行在以上两个系统上。 Tcl代表了“tool command language - 工具命令语言”。它由一个库包组成,程序可以把它用作自己的命令语言的基础。Tcl的开发由两项观察所推动。第一项观察是,通用可编程命令语言通过允许用户用命令语言写程序来扩展工具的内置设施,从而扩大了工具的能力。在强力的命令语言之中最众所周知的例子是UNIX shell[5] 和Emacs 编辑器[8]。在各自情况下,出现的有着不同寻常能力的计算环境,在很大程度上是因为能获得可编程的命令语言。第二个促成它的观察是交互式应用正在增长。在1970 年代晚期和1980 年代早期的分时环境中,几乎所有的程序都是面向批处理的。典型的使用交互式的命令shell 来调用它们。

TCL脚本实例解读

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

海尔联想TCL企业文化建设分析与比较

海尔联想TCL企业文化建设分析与比较 文章出处:发布时间:2005-07-28 企业竞争可以分为四个层次:产品竞争、营销竞争、战略竞争和文化竞争。企业产品竞争的成功是一种短期成功,营销竞争的成功是一种中期成功,战略竞争的成功是一种中长期成功,只有文化竞争的成功才是企业长期成功的根本保证。本文通过对海尔、联想和TCL三个企业的企业文化分析与比较,以论证企业文化对企业发展的重要作用,并希望这些启示能够为意图建设企业文化的企业提供参考价值。 一、海尔、联想、TCL企业文化建设的共同点 (一)企业领导人的高度文化素养 海尔、联想和TCL都建立了很好的企业文化体系,这和企业领导人具有很高的个人文化素养是分不开的。所谓文化素养主要不是指狭义的文化程度高低,而是指精神动力、价值观和行为模式。三位企业领导者共同具有如下的特点: 1.有强烈的精神动力并充满激情地追求目标。海尔是从亏损147万元起步的,联想是20万元起家的,TCL是5000元起家的,能够在市场经济激烈竞争的环境中脱颖而出,把传统的大企业和外企甩在身后,是一件非常不容易的事,没有远大的志向和精神动力是难以达到这种结果的。他们不断的为自己和企业提出新的目标和方向,从单一产品到多元化经营,从国内名牌到国际名牌,从一个落后的国有企业逐渐发展成为上市公司,他们自我超越的脚步没有丝毫的迟疑。 2.自信及坚忍不拔。自信就是相信自己的判断,尤其在困难的时候坚定信心。在1989年,在几乎全部的冰箱厂家都降价的时候,张瑞敏不降价反而提价12%;柳传志在国际品牌大军压境时不甘心只做代理,建立自有PC品牌,最终成为市场第一,将当时的"老师"

惠普甩在身后;李东生总是后发制人,在一个竞争已经很激烈的市场上异军突起,彩电、PC、手机都是如此。 3.强烈的民族自尊心和责任感。三位企业家都不约而同地将敬业报国融入企业的经营理念中,海尔响亮地打出"海尔,中国造"的口号,联想提出"世界的联想",TCL要做"世界级的企业",这种爱国强国的思想从更高层次上激励着企业家取得进步。 4.重视学习。企业家的领导能力和管理能力并不是天生具有的,这和他后天的学习、实践分不开的。三位企业家都非常重视学习、实践和总结,张瑞敏不仅对中国传统文化的精华如孙子兵法、易经、道德经等了如指掌,还委托在海外工作的同事帮助收集最新的管理书籍,使他能掌握世界最新的管理动向,李东生和TCL的高层养成了互相赠送管理书籍的习惯,有时同一本书会收到两三本。柳传志特别喜欢读企业家传记,并结合自己的体会细细捉摸,常常要读几遍,每周六都要拿出半天时间整理个人思路。 5.以身作则。张瑞敏要求员工打卡上班,自己也打卡上班,没有专车,没有专用食堂。李东生要求员工上班穿西装,自己在上班和公众场合永远西服革履,出差轻车简从。柳传志至今还像个中科院的学者,坐车看到当年的同事骑车而过心中感到不安。笔者到过三位企业家的办公室,三位的办公室不约而同地即不大也都相当俭朴。 (二)高度重视企业文化的建设 张瑞敏认为自己在企业里的主要工作之一是做一个"布道者"。海尔是最早在企业里设置"企业文化中心"这一专门机构的企业,"海尔报"不象有些企业的报纸,主要是给外面看的,"海尔报"揭露问题、批评起人来毫不留情。海尔"吃休克鱼"兼并红星电器的案例引起了哈佛大学商学院的关注,成为知名的企业管理案例之一,该案例展示海尔的兼并是以文化为先导的。海尔正是通过这种以无形资产盘活有形资产的方式,将企业文化转化成一种生产力资源。现在,海尔将这种文化扩展到国际投资方面,海尔在美国的生产车间里也到

TCL语言.

TCL语言 Tcl(最早称为“工具命令语言”"Tool Command Language", 但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种脚本语言。由John Ousterhout创建。TCL很好学,功能很强大。TCL经常被用于快速原型开发,脚本编程,GUI 和测试等方面。TCL念作“踢叩” "tickle". Tcl的特性包括: * 任何东西都是一条命令,包括语法结构(for, if等)。 * 任何事物都可以重新定义和重载。 * 所有的数据类型都可以看作字符串。 * 语法规则相当简单 * 提供事件驱动给Socket和文件。基于时间或者用户定义的事件也可以。 * 动态的域定义。 * 很容易用C, C++,或者Java扩展。 * 解释语言,代码能够动态的改变。 * 完全的Unicode支持。 * 平台无关。Win32, UNIX, Mac上都可以跑。 * 和Windows的GUI紧密集成。Tk * 代码紧凑,易于维护。 TCL本身不提供面向对象的支持。但是语言本身很容易扩展到支持面向对象。许多C语言扩展都提供面向对象能力,包括XOTcl, Incr Tcl 等。另外SNIT扩展本身就是用TCL写的。 使用最广泛的TCL扩展是TK。TK提供了各种OS平台下的图形用户界面GUI。连强大的Python语言都不单独提供自己的GUI,而是提供接口适配到TK上。另一个流行的扩展包是Expect. Expect提供了通过终端自动执行命令的能力,例如(pass wd, ftp, telnet等命令驱动的外壳). 下面是TCL程序的例子: #!/bin/sh # next line restarts using tclsh in path \ exec tclsh ${1+"$@"} # echo server that can handle multiple # simultaneous connections. proc newConnection { sock addr port } { # client connections will be handled in # line-buffered, non-blocking mode fconfigure $sock -blocking no -buffering line # call handleData when socket is readable fileevent $sock readable [ list handleData $sock ] } proc handleData {

TCL企业文化

tcl的企业文化 The Creative Life TCL即The Creative Life 三个英文单词首字母的缩写,意为创意感动生活。 TCL集团股份有限公司创立于1981年,是目前中国比较大的、全球性规模经营的消费类电子企业集团之一,旗下拥有三家上市公司:TCL集团(SZ.000100)、TCL多媒体科技(HK.1070)、TCL 通讯科技(HK.2618)。目前,TCL已形成多媒体、通讯、家电和部品四大产业集团,以及房地产及投资业务群,物流及服务业务群。 在过去二十多年中,TCL借中国改革开放的东风,秉承敬业奉献、锐意创新的企业精神,从无到有,从小到大,迅速发展成为中国电子信息产业中的佼佼者。1999年,公司开始了国际化经营的探索,在新兴市场开拓推广自主品牌,在欧美市场并购成熟品牌,成为中国民族企业国际化进程中的领头羊。 在发展壮大中,TCL确立了在自主创新方面的优势和能力:在TCL 诞生了中国第一台免提式按键电话、第一台28寸大彩电、第一台钻石手机、第一台国产双核笔记本电脑等,很多具有划时代意义的创新产品。

2007年TCL全球营业收入390.63亿元人民币,5万多名员工遍布亚洲、美洲、欧洲、大洋洲等多个国家和地区。在全球40多个国家和地区设有销售机构,销售旗下TCL、Thomson、RCA等品牌彩电及TCL、Alcatel品牌手机。2007年TCL在全球各地销售超过1501万台彩电,1190万部手机。海外营业收入超过中国本土市场营业收入,成为真正意义上的跨国公司。 TCL集团旗下主力产业在中国、美国、法国、新加坡等国家设有研发总部和十几个研发分部。在中国、波兰、墨西哥、泰国、越南等国家拥有近20个制造加工基地。 2007年TCL品牌价值达401.36亿元人民币(54亿美元)。 未来十年TCL将继续构建融设计力、品质力、营销力及消费者洞察系统为一体的“三力一系统”,将TCL打造成中国具有创造力的品牌。 放眼未来,TCL的发展目标是:通过不断提升企业的国际化经营能力,建立自有知识产权的技术优势,成为受人尊敬的、具有创新能力的全球领先企业。

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,这种注释是正确的

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脚本的编写。

TCL:“合金式”文化打造核心能力

产品至少在某一方面有优势,才能有市场竞争力,而这种优势来源于企业核心竞争力。企业核心竞争力是在企业发展过程中不断积累而成的,企业在某一领域的时间越长就越有利于形成企业在该领域的竞争力,并且形成的竞争力是潜在竞争者进入的障碍。但是TCL总是以一个跟随者的身份在产品高成长时期进入不同的产品领域,并且又在短短的时间内成为该领域的竞争主角。 难道TCL的成功说明了其它企业长期形成的核心竞争力是脆弱的,甚至于说核心竞争力只是在某一阶段有作用,而没有延续发展的能力?不,这是个狭隘的观点,TCL的成功正说明了核心竞争力具有延伸性。作为TCL核心竞争力的“合金式”具有持续拓展的能力,将TCL成功地带入了各个新的领域,并在这些领域成长为名列前茅的主要企业,创造了后来居上的奇迹,使TCL成为中国十大家电企业之一。 一、多领域的成功 TCL集团股份有限公司是从事家电、信息、通讯、电工产品研发、生产及,集技、工、贸为一体的特大型国有控股企业。这个地地道道的民族企业与其它的国内知名企业一样,是靠企业实力走上的强大之路。但是他总爱以跟随者的角色出现在一个新领域,而又在几年之内蜕变成主角,这种成长的方式显得与众不同又颇有成效。如果仔细地分析,TCL绝对不是一个首创者,但他一直是个创新者,正是创新才有了竞争的超越,才有了TCL今天的成就。 1981年,TCL仅仅是个靠贷款5000元起家的地方性小企业,而今已是拥有家电、通讯、信息、电工四大产品系列的著名企业,他在各个领域的成就令人叹服。 TCL在多个领域显著的成绩,显示了TCL超凡的扩展竞争力。1985年TCL电话投入市场,仅四年的时间销量就高居全国第一,并且保持连续12年排在全国首位;1993年TCL王牌彩电问世,三年后进入全国前三强,2000年量就居全国第一,在2001年中国彩电业全线亏损的情况下仍赢利3亿多元,成为业内奇迹;1999年TCL平面开关插座量连续3年居国内第一;1998年推出家电电脑,到2001年TCL电脑量就上升到国内家用电脑市场的第三位;1998年TCL手机面市,2002年上半年量居国内市场第三、国产品牌第一,创下国产手机的佳绩。TCL的成功不是偶然,是他掌握了恰当的进入时期,给自己创造了机遇。 TCL王牌彩电是TCL的代表杰作,在1994年国内量还是55万台;到1995年国内量已增长到86万台,并且25英寸以上的大屏幕彩电量居国内第一名;在1996年长虹降价的第五天,就积极地跟进长虹降价战略,成为业界的一匹黑马,在国内产品的排名从第六迅速跃至第三;1992年与港方合资组建彩电生产企业;1996年兼并香港三大彩电生产企业之一的陆氏实业基地,开创了我国国企兼并港资企业的先河;2001年产销量达到613万台,跃居全国第一。TCL王牌彩电是中国彩电行业迅速升起的一颗明星,让世人再次目睹了后起之秀的风采。 联合、兼并等方式是TCL进入新领域的捷径,1997年与河南美乐彩电强强联手,1999年以资产无偿划拨方式受让内蒙古彩虹电视机厂,2000年兼并中山索华空调厂,2001年兼并无锡永固电机厂成立TCL无锡数码有限公司……借助其它企业的力量,TCL成功开发、生产、了多个产品,目前已经拥有了以王牌彩电为代表的家电、通讯、信息、电工四大产品系列,将企业的核心竞争力拓展到新的领域。 随机读管理故事:《放下的智慧》 有一种鸟能飞越太平洋,它需要的只是一小截树枝。把树枝衔在嘴里,累了就把枝扔到水面,飞落到上面休息;饿了就站在树枝上捕鱼;困了就在树枝上睡觉。如果小鸟衔的不是树枝,而是鸟窝或食物,那它能飞那么久吗?人生亦然,能舍得,更能成功;放下包袱,方能攀登高峰!

企业文化分析

本文《企业文化分析:TCL企业文化新说、TCL企业精神》完全由企业文化网站长精心原创,企业文化网介绍企业文化的建设及其作用,内容仅供参考。 调一种合金式的企业文化—以中国传统的优秀文化为基础,吸收西方企业管理的精髓,谓之“新儒家”文化。哪一个企业能够在企业文化建设方面领先,哪一个企业就能建立起竞争优势。 ——TCL集团总裁李东生 TCL集团经过十多年的发展,在改革开放的有利环境中,依靠TCL人的敬业奉献和不懈努力,从无到有、从小到大,在完全没有国家资本金投入的情况下,使TCL挤身中国最大的十家电子企业行列,创造了一个民族企业高速成长的神话。但TCL也很清楚地认识到:目前企业正处在一个发展的关键时期,企业面对的是一个日益开放和竞争日趋激烈的市场,在全球经济一体化的大趋势下面对国外企业的直接竞争,TCL的企业现状和外部经济环境已发生了巨大变化,以往促使TCL成功的各种因素,并不足以保证TCL今后能继续获得成功。 TCL只有锐意变革、创新进取,提高经营管理水平,

改革经营体制,整合TCL企业文化,才能建立和保持企业的竞争优势,进而把TCL建设成真正有能力参与国际竞争的大型企业。 TCL集团是由一个小型地方国有企业发展起来的,目前虽然已经发展到比较大的规模,但与国外企业相比,TCL的整体基础还是比较薄弱的,企业还有许多和现代企业管理体制及市场经济机制不相适应的地方。为此,去年初TCL集团公司提出二次创业,确立了具体的目标和任务,并在许多方面取得了明显进展,完成了部分企业的体制改革,开发了新技术和新产品,实施了综合经营战略;在更新经营观念、建立新的经营机制以及企业文化建设方面,也在有条不紊地推进。为什么TCL要进行经营变革呢这是因为我国的经济体制正在进行根本性的变革、企业的经营环境也在发生巨大的变化,企业若不能适应市场竞争的需要,主动变革创新,提高管理水平和竟争能力,就难以继续生存和发展。 在市场方面,我们从计划经济过渡到市场经济,已形成了买方市场,特别是近年来市场有效需求的增长正在下降。据国内贸易部提供的资料,我国消费市场高速增长一直是带动我国经济增长的主要动力,但消费市场增长率逐年下降:1997年市场增长是13%,1998年市场增长将降至10.5%。过去由高速增长的市场带动起来的经济增长格局已发生变化,大

TCL企业文化理念的诠释

TCL企业文化理念的诠释 2006-09-21 19:25:03网友评论0 条进入论坛 (一)TCL企业愿景:成为受人尊敬和最具创新能力的全球领先企业 企业愿景:是企业未来状况的表述,即要努力达到的境界。它告诉企业的每一名员工“我们将成为什么”的前景,并使之成为一个组织中各个成员发自内心的共同目标,在员工心中产生一股令人深受感召的力量,形成企业的凝聚力和向心力,为企业的生存和发展提供长久持续的动力。TCL企业愿景是TCL所有员工期望共同创造的企业未来景象,是全体TCL人发自内心努力追求的共同理想。 “成为受人尊敬和最具创新能力的全球领先企业”意味着我们必须致力于:成为极具知名度和美誉度的消费者首选品牌;成为最值得信赖的伙伴-无论是客户、员工还是社会;成为引领未来的力量:包括以先进的技术和时尚的产品引领消费潮流;以领先的经营理念和商业模式适应市场变化;以完善的企业机制和管理体系保障持续的创新活力。 (二)TCL企业使命:为顾客创造价值、为员工创造机会、为股东创造效益、为社会承担责任 企业使命:是源于社会责任、义务而承担或由企业自身发展所规定的任务是关于企业经营方向、性质、责任的概括。 1 为顾客创造价值 顾客是唯一能够淘汰我们所有人的人。企业持续发展的唯一途径就是不断地创造顾客,通过提供优质产品和服务赢得顾客持续信赖与尊重。 主要行为表现:敏锐发现并快速响应顾客需求;顾客第一,每位员工的言行都要为增加顾客价值承担责任;为企业内部客户提供有价值的支持与服务。 2 为员工创造机会 员工是真正能够代表公司的人。员工是企业最宝 贵的资源,企业有责任满足员工不同层次的需求,并为员工的成长发展提供职业舞台。

TCL语言基础资料

TCL语言基础资料 一脚本语言详细介绍 21世纪的高级编程语言 摘要: Perl和Tcl等脚本语言代表一种与c或JavaTM 为代表的系统程序设计语言完全不同的编程形式。脚本语言为"胶着"应用程序而设计,它使用无类型方法来实现高级编程和比系统程序设计语言更快的发展应用。计算机速度的增长和混合应用的改变使脚本语言在今后的应用中越来越重要。 关键字: 组件框架,面向对象编程,脚本,强类型,系统编程 1.简介 在过去的十五年里,人们编写计算机程序的方法

发生了根本的转变。这种转变是从c或c++等系统程序设计语言到Perl或Tcl等脚本语言的过渡。虽然很多人参与了转变,却很少有人意识到它的发生,更不用说知道为什么会发生。这篇文章是我关于为什么在下个世纪脚本语言可以比系统程序设计语言更好的处理许多编程工作的一点看法。 与系统程序设计语言相比,不同的脚本语言为不同的工作而设计,这导致了语言间的根本不同。系统程序设计语言起源于像内存字等最初期的计算机元素,它为建立数据结构和算法而创建。相反的,脚本语言为胶着而设计:他们假设已经存在一套强大的组件,而它主要是把组件连在一起。系统程序设计语言使用强类型定义来帮助处理复杂事务,而脚本语言使用无类型定义来简化组件间的联系,并提供快速应用开发. 脚本语言和系统程序设计语言互为补充,并且二十世纪六十年代以来的大多数主要的计算机平台都同时提供这两种类型的语言。这些语言在组件框架中有着典型的应用:组件由系统程序设计语言创建,并由脚本语言组合在一起。然而,速度更快的机器,

更好的脚本语言,图形用户界面和组件构造重要性的不断提高,因特网的发展等发展趋势大大提高了脚本语言的应用。在今后的十年中,这种趋势将继续,而且越来越多的完全使用脚本语言和系统程序设计语言书写的应用程序将主要用来创建组件。 2.系统程序设计语言 为了理解脚本语言和系统程序设计语言的不同,最好先了解一下系统程序设计语言是如何发展的.系统程序设计语言是作为除汇编语言外的另一种选择而引入的.在汇编语言里,实际上机器的每一个细节都被反映在程序里.每个状态代表一个简单的机器指令,而程序员必须处理像寄存器分配和程序调用顺序等低层细节.因此,用汇编语言编写和维持大型程序是很困难的. 真的不掉线吗??、???????????? 二十世纪五十年代后期像Lisp,Fortran和Algol等高层语言开始出现.这些语言里的状态和机器指令不再完全一致,编译程序把过程程序中的每个状

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

TCL文化及其变革

文化变革“鹰巢”行: 德鲁克说:“变革是永恒的。”企业改制、战略转型、并购整合…,在企业的生命历程 中不断面临着变革的挑战与机遇。那我们下面来看下tcl是如何发起变革和实现成功变革的。它主要分三个阶段: 文化变革第一阶段:反思与梳理 企业在转型期,特别是在低谷时期需要改革和自我反省的勇气。TCL正是在这种情况下开始反省自我,开始了企业文化的变革。 文化变革第二阶段:沟通愿景,凝聚共识 员工的智慧是伟大的,而高管更是不可忽略的。对于企业的愿景和价值观,如果没有高层 达成共识是执行不下去的。高层的共识是成功变革的第一步。在企业发展的初级阶段。企 业文化就是老板的文化,但等企业做大后,老板文化一定要转化为团队的文化,要转变为 创新的文化和市场导向的文化。这是TCL对企业文化演变规律的认识。 文化变革第三阶段:行动落实 无论怎么说,怎么写,最重要的是怎么行动。为了落实行动,TCL提出了变革行动纲领。纲领概括为“三改造二植入一转化”。 三改造:改造学习,改造组织,改造流程。 二植入:植入用人导向与企业培训体系,植入评价体系与激励体系。 一转化;将愿景转化为激励每一个企业、每一个部门和每一个员工的具体目标。 改造学习就是要员工成为心态开放的学习者,通过学习保持竞争力。改造流程中,在不确 定性成为常态时,最简单的常常是最有效的。在组织变革复杂时,一定要使流程面向客户 且简单化。 总的来说:学院在企业文化变革中起到了推动作用,力图将企业文化变成大家的共识 和习惯。 经过了这几阶段的变革以后,tcl形成了自己怎样的企业文化呢?下面一起来看下。 TCL企业文化 众所周知,人与文化是企业竞争力的源泉。有句话说,文化管理是企业管理的最高境界。 那么tcl在经过了这三个阶段后所形成的属于他们自己的文化是怎样的呢?那以下就是tcl 企业文化的简单介绍: TCL集团企业文化:

TCL脚本语言-14-输入输出系统

输入输出系统 输入和输出相比大家都不陌生。说起它,我就想起来大学第一次写Pascal程序的时候,总要写出这样的代码: Program Test(input,output); Begin Write(‘Hello,World!’); End. 老实说,第一行的input和output两个参数让我迷惑了很久,一直都不明白它们的用途。后来才慢慢的知道它们叫做输入和输出。 输入和输出总是和文件系统紧密相连。现代操作系统中,所有的设备几乎都被抽象成文件系统。但是不同操作系统下文件系统格式不同,例如Unix和Windows、MAC的目录等都有一定的差异。好在TCL语言比较好的解决了这个问题。本章节我们会详细的介绍如何在TCL中操作文件系统以及读写文件。 操作文件系统 TCL中能够非常方便的操作文件、目录。包括:查询和设置文件属性、复制、删除以及路径名字的操作等。所有这些都是通过一个file命令来完成,其语法都非常简单,所以我们这里只是按照分类,列举出该命令的各种用法: 文件属性操作 命令用法描述 file atime name ?time? 返回文件name最后被读取的时间;该命令在FAT文 件系统上无效(返回数据可能不正确); file mtime name ?time? 设置或者修改文件name的最后被修改时间。time参 数表示1970/1/1到现在的秒。设置最后修改时间,和 那个著名的touch命令完成类似的功能; file attributes name file attributes name ?opt? file attributes name ?opt vla? ?opt val?... 查询或者设置文件的属性。第一个命令查询所有的属性;第二个命令查询指定的属性;第三个设置属性的值。 file executable name 看看这个文件是否是可执行的,是就返回1;

DDL,DML,DCL,TCL四种语言的简介

DDL,DML,DCL,TCL四种语言的简介 1.DDL(Data Definition Language)数据库定义语言 statements are used to define the database structure or schema. DDL是SQL语言的四大功能之一。 用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束 DDL不需要commit. CREATE ALTER DROP TRUNCATE COMMENT RENAME 2.DML(Data Manipulation Language)数据操纵语言 statements are used for managing data within schema objects. 由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。 DML分成交互型DML和嵌入型DML两类。 依据语言的级别,DML又可分成过程性DML和非过程性DML两种。 需要commit. SELECT INSERT UPDATE DELETE MERGE CALL EXPLAIN PLAN LOCK TABLE 3.DCL(Data Control Language)数据库控制语言授权,角色控制等GRANT 授权 REVOKE 取消授权 4.TCL(Transaction Control Language)事务控制语言 SAVEPOINT 设置保存点 ROLLBACK 回滚 SET TRANSACTION SQL主要分成四部分: (1)数据定义。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。 (2)数据操纵。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。

管理学tcl文化

TCL的企业文化 TCL集团股份有限公司创办于1981年。经过20年的发展,TCL集团现已形成了以王牌彩电为代表的家电、通讯、信息、电工四大产品系列。特别是进入1990年代以来,连续12年以年均50%的速度增长,是全国增长最快的工业制造企业之一。2001年,TCL集团销售总额211亿元,利润7.15亿元,税金1.08亿元。出口创汇7.16亿美元。200l年TCL品牌价值144亿元,在全国知名品牌中排第5名。 TCL的企业宗旨是"为顾客创造价值,为员工创造机会,为社会创造效益"。 “为顾客创造价值”。这是TCL文化生生不息的价值根本,明确企业最重要的工作目标就是用高质量的产品、全方位的服务满足社会广大顾客的需求,通过卓有成效的工作,让更多的顾客认同TCL产品和服务的价值。这就要求TCL人在生产经营的每一个环节,都必须把顾客的需求放在第一位。 “为员工创造机会”。这是TCL文化生生不息的动力源,明确员工既为手段又为目的。TCL要建立一个科学、公平的员工考核和价值评价体系,建立员工教育和培训制度,建立合理的薪酬和福利制度,使员工在企业能获得更好的成长和发展机会,实现自己的事业追求,同时也获得合理的回报和生活福利保障。 “为社会创造效益”。这是TCL文化生生不息的生态链。TCL是国有控股企业,企业所创造的效益,在更大程度上是为社会创造效益,是为国家经济的振兴、为民族工业的发展尽力尽责,这是所有TCL人的使命。 TCL倡导的企业精神是“敬业、团队、创新”。 “敬业”是鼓励为事业而献身的精神,这种敬业实质上是TCL过去“艰苦拼搏”精神的延续;追求更高的工作目标,勇于承担工作责任,掌握更好的工作技能。培养踏踏实实和精益求精的工作作风。 “团队”是要求企业内部要有协作和配合的精神,营造企业和谐健康的工作环境,员工不但要对自己的工作负责,同时也对集体的工作负责,对整个企业负责,提倡员工间互相鼓励、互相关心和帮助。 “创新”精神一直是TCL高速发展的重要动力。创新包涵了“开拓”的内涵。TCL提出的企业经营目标、宗旨、精神,构成了一个相互支撑的企业文化体系。 思考题: 1、结合案例谈谈你对企业文化在企业管理中的作用的看法。 2、TCL的文化是如何体现组织文化的基木特征的?

Tcl用法详述

T C L用法祥述 一TCL语法 1 脚本、命令和单词符号 一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的: set a 1 set b 2 或 set a 1;set b 2 TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。 TCL解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,TCL 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。 2 置换(substitution) 注:在下面的所有章节的例子中,'%'为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果。'//'后面是我自己加上的说明,不是例子的一部分。 TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如: %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提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。 1) 变量置换(variable subtitution)