TCL基础教程——(1)入门

合集下载

Tcl语言基础教程

Tcl语言基础教程
变量置换由一个$符号标记,变量置换会导致变量的值而非变量(标识符)本身被插入到字符串中。
set x 10
set y 100 + $x
这时,y的值还不是我们想要的值110,而是10+100,因为Tcl解释器把10+100看成是一个字符串而不是表达式;y要想得到值
110,还必须用命令置换,使得Tcl会把10+100看成一个表达式并求值。
string tolower string [first] [last]
string replace string first last [newstring]
string equal [-nocase] [-length int] string1 string2
string match [-nocase] pattern string如果pattern匹配string,那么返回1,否则返回0.
Tcl变量根据其结构的复杂程度分为“简单变量”和“数组变量”两类。
(1)简单变量
一个Tcl的简单变量包含两个部分:名字和值,其中名字和值都可以是任意字符串。不过为了更好的使用变量置换功能,变量名
最好按C\C++语言中标识符的命名规则命名。这是因为Tcl解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数
个新字符串,并返回。例如:
set msg [format "%s is %d years old" $name $age]
【scab】
语法:scan string formatsting varName varName ...
scan命令可以认为是format命令的逆,其功能类似于ANSI C中的sscanf函数。它按formatsting提供的格式分析string字

语言基础TCL学习.pptx

语言基础TCL学习.pptx
第12页/共14页
第13页/共14页
感谢您的观看!
第14页/共14页
第11页/共14页
作业
• 事务的定义是什么,它有哪些特征? • 创建一个teacher表,字段有:teacher_id,name,gender,age 等字段,其中
teacher_id是主键,name不能为空,gender默认值为”男”;使用DML语法书 写 出 往 tea c h e r 表 中插 入 数 据 的 三条 i n s e r t 语 句 , 前 两 条 i n s e r t 语 句 之 后使 用 TC L 定 义 一 个保存 点 , 保 存 点 分 别 为 s p1 和 s p2 ; 在 最 后 一条 i n s e r t 语 句之 后 使 用 TC L 语法回滚到sp2保存点并使用TCL语法提交之,查看最后保存到teacher表中的数 据是哪些数据,并分析原因。
事务与会话: 一个会话等同于对数据库的一次连接,如果有多个用户连接到数据
库则会产生多个会话;各个会话之间的事务是相互隔离的,即会话之 间数据互不共享,一个事务在没有被提交之前其数据被放在当前会 话所标识的内存中,这个时候其它任何会话都对当前会话发起的事 务操作不可见,一旦事务被提交之后其数据将被持久化到磁盘数据 文件中去,此时其它会话将可以看到当前会话所做的更改
commit;提交回滚到保存点 mark1
第10页/共14页


• 事务的定义是指单个逻辑工作单元执行的一系列操作 • 事务的四大特征是” 一原永隔”;即:一致性、原子性、永久性、隔
离性 • 熟悉TCL语法:
A、savepoint spName:定义一个spName的保存点 B、rollback to savepoint spName:回滚到指定的保存点 spName C、rollback:全部回滚当前事务 D、commit:提交当前事务 会话发起的事务如果没有被会话提交则其它会话对当前会话的修改 将不可见,一旦会话提交事务则事务所做的数据修改将被更新到磁 盘数据文件,此时其它用户发起的会话将可以看到当前会话发起事

TCL入门

TCL入门

Tcl_Interp * interp,
int argc, char* argv[]);
int Tcl_AppInit(Tcl_Interp *interp);
#define MAX_WORD_LEN 32
int GetWordFromStr(const char* pStrSource,char * pDestStr,int len); //这里更改为你好测试的函数定义。
int Tcl_EXGetWord(ClientData clientData,
Tcl安装配置
1. 安装ActiveTcl 8.4(包括Expect扩展)
下载地址:
/ActiveTcl/Windows/8.4.15/ActiveTcl8.4.15.0.280619-win32-ix86-threaded.exe
Expect简介
一个叫做fsck的Unix文件系统检查程序,可以从Shell里面用-y或者-n选项来执行。 在手册[1]里面,-y选项的定义是象这样的。
“对于fsck的所有问题都假定一个“yes”响应;在这样使用的时候,必须特别的小心,因为它实际上允许程序无条件的继续运行,即使是遇到了一些非常严重的错误”
相比之下,-n选项就安全的多,但它实际上几乎一点用都没有。这种接口非常的糟糕,但是却有许多的程序都是这种风格。 文件传输程序ftp有一个选项可以禁止交互式的提问,以便能从一个脚本里面运行。但一旦发生了错误,它没有提供的处理措施。
Expect是一个控制交互式程序的工具。他解决了fsck的问题,用非交互的方式实现了所有交互式的功能。Expect不是特别为fsck设计的,它也能进行类似ftp的出错处理。
Expect被设计成专门针和交互式程序的交互。一个Expect程序员可以 写一个脚本来描述程序和用户的对话。接着Expect程序可以非交互的运行“交互式”的程序。写交互式程序的脚本和写非交互式程序的脚本一样简单。 Expect还可以用于对对话的一部分进行自动化,因为程序的控制可以在键盘和脚本之间进行切换。

(完整)TCL培训教程(全)

(完整)TCL培训教程(全)

家居小家电
包括吸尘器、加湿器、空气净化器等,主要用 于家居清洁和环境优化。
个人护理小家电
包括电吹风、电动剃须刀、美容仪等,主要用 于个人护理和美容。
小家电选购指南与注意事项
根据需求选择
明确自己的需求,选择适合的小家电 产品。
了解功能和性能
在同类产品中比较价格和售后服务, 选择性价比较高的产品。
关注品牌和质量
空调产品分类及功能特点
窗式空调 分体式空调 中央空调
适合小面积空间,安装便捷,价格实惠。 室内外机分离,造型美观,制冷/制热效果好。 适用于大面积空间,隐藏式安装,舒适度高。
空调产品分类及功能特点
01
高效制冷/制热
采用先进制冷技术
,快速达到设定温
02
度。
节能环保
符合国家能效标准 ,节能效果显著。
注意事项
在购买TCL电视时,消费者需要注意检查电视的外观是否完好 、屏幕是否有坏点或亮点等问题。此外,还需要了解电视的 保修期限和保修范围等信息,以便在出现问题时能够及时得 到维修和保障。
电视使用技巧及维护保养
使用技巧
在使用TCL电视时,消费者可以通过调整 画面亮度、对比度、色彩等参数来获得 更好的观看体验。同时,还可以通过连 接外部音响或耳机等设备来提升音质效 果。此外,在使用智能功能时,需要确 保网络连接稳定,并定期更新系统和应 用程序以保持最佳性能。
电源与电压
确保电源符合空调要求,避免电压不稳定影响使 用。
选购附件
根据需要选购合适的空调附件,如遥控器、过滤网等。
空调使用技巧及维护保养
合理设置温度
根据季节和天气合理设置温度, 避免过高或过低。
定期清洗过滤网
保持过滤网清洁,提高空气流通 效果。

TCL培训教程(全)

TCL培训教程(全)

TCL 培训教程(全)(仅供内部使用)深圳市华为技术有限公司版权所有侵权必究深圳市华为技术有限公司研究管理部文档中心文档编号产品版本密级共76页拟制:陈旭盛日期:2000/12/08审核:日期:yyyy/mm/dd 审核:日期:yyyy/mm/dd 批准:日期:yyyy/mm/dd修订记录日期修订版本描述作者2000/12/08 2.00初稿完成陈旭盛目录1引言6 2语法72.1脚本、命令和单词符号72.2置换(substitution)72.2.1变量置换(variable subtitution)82.2.2命令置换(command substitution)82.2.3反斜杠置换(backslash substitution)82.2.4双引号和花括号92.3注释93变量103.1简单变量103.2数组113.3相关命令113.3.1set113.3.2unset113.3.3append和incr124表达式124.1操作数124.2运算符和优先级124.3数学函数135List145.1list命令145.2concat命令:145.3lindex命令155.4llength命令155.5linsert命令155.6lreplace命令:155.7lrange命令:155.8lappend命令:155.9lsearch命令:165.10lsort命令:165.11split命令:165.12join命令176控制流176.1if命令176.2循环命令:while、for、foreach176.2.1while命令176.2.2for命令186.2.3foreach命令186.2.4break和continue命令196.2.5switch命令196.1eval命令196.2source命令19 7过程(procedure)207.1过程定义和返回值207.2局部变量和全局变量207.3缺省参数和可变个数参数217.4引用:upvar21 8字符串操作228.1format命令228.2scan命令238.3regexp命令238.4regsub命令258.5string命令258.5.1string compare?-nocase??-length int?string1string2258.5.2string equal?-nocase??-length int?string1string2258.5.3string first string1string2?startindex?268.5.4string index string charIndex268.5.5string last string1string2?startindex?268.5.6string length string268.5.7string match?-nocase?pattern string268.5.8string range string first last278.5.9string repeat string count278.5.10string replace string first last?newstring?278.5.11string tolower string?first??last?278.5.12string toupper string?first??last?278.5.13string trim string?chars?278.5.14string trimleft string?chars?278.5.15string trimright string?chars?27 9文件访问289.1文件名289.2基本文件输入输出命令289.3随机文件访问299.4当前工作目录309.5文件操作和获取文件信息30 10错误和异常3310.1错误3310.2从TCL脚本中产生错误3410.3使用catch捕获错误3510.4其他异常35 11深入TCL3711.1查询数组中的元素3711.2info命令3811.2.1变量信息3811.2.2过程信息3911.2.3命令信息4011.2.4TCL的版本和库4111.2.5命令的执行时间4111.2.6跟踪变量4111.2.7命令的重命名和删除4311.2.8unknown命令4411.2.9自动加载44 12历史记录45 13TCL和C\C++4713.1生成自己的TCLSH4813.2扩展自己的命令:方法(一)4813.2.1编写扩展命令对应的C/C++过程4813.2.2注册命令4913.2.3命令返回值和命令对应的过程的返回值5013.3扩展自己的命令:方法(二)5213.3.1Tcl_Obj结构5213.3.2编写扩展命令对应的C/C++过程5413.3.3注册命令5413.4利用clientData参数和deleteProc参数5513.5在C/C++应用程序中嵌入TCL58 14总结59TCL 培训教程(全)关键词:TCL 摘要:本文是TCL 教材的第三稿,前两稿分别是《TCL 的使用》和《TCL 培训教程》。

TCL培训教程(全)

TCL培训教程(全)

01
```
02
如果一切顺利,您将在终端中看 到输出`Hello, World!`。
变量、数据类型和运算符
• 变量:TCL中的变量不需要事先声明,可以直接赋值。变量名 可以以字母或下划线开头,后面可以跟字母、数字或下划线。 例如
变量、数据类型和运算符
```tcl
set myVar "Hello"
变量、数据类型和运算符
通过本项目,我们成功构建了一个简易的Web服务器 ,实现了HTTP协议的基础功能,并集成了CGI支持动 态网页生成。 展望与改进
在性能和安全性方面也可以进行进一步优化和提升。
THANKS FOR WATCHING
感谢您的观看
02
讲解使用TCL进行网络数据发送和接收的方法,包括数据的编码
、解码以及错误处理。
Socket事件处理
03
阐述如何处理Socket连接、断开、数据接收等事件,实现实时
网络通信。
图形界面开发(Tk)
Tk基础组件
介绍Tk中常用的基础组件,如标 签、按钮、文本框等,以及它们
的属性和方法。
布局管理
讲解如何使用Tk的布局管理器,如 pack、grid、place等,对界面进 行布局。
实现HTTP协议基础功能
生成HTTP响应 根据请求内容生成相应的HTTP响应。 构造响应行、响应头和响应体,并发送给客户端。
集成CGI支持动态网页生成
CGI概述
CGI(Common Gateway Interface)是一种服务器与外 部程序交互的规范。 通过CGI,服务器可以调用外部程序生成动态内容。
SQL语句执行
阐述如何在TCL中执行SQL语句 ,包括查询、插入、更新和删 除等操作。

(完整)TCL培训教程(全)

(完整)TCL培训教程(全)

Tcl编程简介(一)简介 Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。

是tool command language的缩写,发音为 "tickle”,实际上包含了两个部分:一个语言和一个库。

首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。

它有一个简单的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。

其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的过程)的库函数。

应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。

但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。

下面简单介绍以下tcl的语法规则:解释器 在Tcl的数据结构中的核心是Tcl_Interp.一个解释器包含了一套命令,一组变量和一些用于描述状态的东西。

每一个 Tcl命令是在特定的Tcl_Interp中运行的,基于Tcl的应用程序可以同时拥有几个Tcl_Interp。

Tcl_Interp是一个轻量级的结构,可以快速的新建和删除。

数据类型 Tcl只支持一种数据结构:字符串(string)。

所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。

请牢记这一点,所有的东西都是字符串。

这是它比较有特点的方面字符串有三种形式:命令(command), 表达式(expresion)和表(list)。

Basic Command Syntax 基本语法 Tcl有类似于shell和lisp的语法,当然也有许多的不同。

一条Tcl的命令串包含了一条或多条命令用换行符或分号来隔开,而每一条命令包含了一个域(field)的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它。

例如: set a 22 //相当于C中的 a=22 a是一个变量这条命令分为三个域:1 set 2 a 3 22 set使用于设置变量的值的命令,a、20 作为参数来传给它,a使它要操作的变量名,22是要付给的a值。

Tcl编程教程

Tcl编程教程

Tcl编程教程第一部分:基础知识```tclputs "Hello, Tcl!"```将文件保存为`hello.tcl`。

在命令行中,使用以下命令运行这个程序:```bashtclsh hello.tcl```你将看到输出`Hello, Tcl!`。

3. 变量:在Tcl中,你可以使用`set`命令创建变量。

例如:```tclset name "John"puts $name```输出将会是 `John`。

4. 字符串操作:Tcl提供了许多可以操作字符串的内置命令。

例如,你可以使用`string length`命令来获取字符串的长度:```tclset str "Hello, World!"set len [string length $str]puts "String length: $len"```输出将会是 `String length: 13`。

5. 数字操作:除了操作字符串,Tcl还支持对数字的操作。

你可以使用`expr`命令来进行数学运算:```tclset num1 10set num2 5set sum [expr $num1 + $num2]puts "Sum: $sum"```输出将会是 `Sum: 15`。

第二部分:条件和循环1. 条件语句:在Tcl中,你可以使用`if`语句来进行条件判断。

例如:```tclset num 10if {$num > 0}puts "Positive"} elseif {$num < 0}puts "Negative"} elseputs "Zero"```输出将会是 `Positive`。

2. 循环语句:Tcl中有两种常见的循环语句,`while`循环和`foreach`循环。

TCL教程(中文)(2024)

TCL教程(中文)(2024)

B
C
D
脚本执行过程
详细剖析TCL脚本的执行过程,包括命令 解析、变量替换、执行结果输出等步骤。
控制结构
介绍TCL中的条件判断(if-else)、循环 (foreach、while)等控制结构,以及如 何使用它们来编写逻辑清晰的脚本。
2024/1/29
20
复杂脚本优化技巧分享
代码重用与模块化
讲解如何将重复的代码片段抽象成函数或过 程,实现代码重用和模块化,提高脚本的可 维护性和可读性。
比较运算符
TCL支持比较运算符,如等于(`==`)、不等于(`!=`)、大于 (`>`)、小于(`<`)等。比较运算的结果为布尔值,即真或假 。
逻辑运算符
TCL支持逻辑运算符,如逻辑与(`&&`)、逻辑或(`||`)、逻 辑非(`!`)等。逻辑运算用于组合多个条件,并根据条件的 真假返回相应的结果。
TCL教程(中文)
2024/1/29
1
目录
2024/1/29
• TCL基础知识 • TCL基本语法 • TCL高级特性 • TCL扩展功能 • TCL实例分析 • TCL学习资源推荐
2
TCL基础知识
01
2024/1/29
3
TCL概述
TCL是一种脚本语言
TCL代表“工具命令语言”,是一 种广泛用于嵌入式系统和应用程 序的脚本语言。
I/O流处理
TCL支持I/O流的概念,可以通过管道命令实现不同命令之间的数据传 递和处理。
2024/1/29
14
TCL扩展功能
04
2024/1/29
15
Tk图形界面开发库介绍
Tk概述
Tk是TCL的图形用户界面工具包, 提供了一套丰富的图形控件和布局 管理器,用于创建跨平台的GUI应 用程序。

tcl教程

tcl教程

tcl教程TCL(工具命令语言)是一种脚本语言,主要用于实现自动化工作流程、快速开发小型工具和控制系统等应用。

它具有简单易学、功能丰富以及可移植性好等特点。

本教程将带你从基础开始逐步学习TCL的语法和常用命令,并通过实例演示帮助你快速掌握TCL编程。

1. TCL的安装和运行环境配置首先,你需要下载并安装TCL的最新版本。

在安装过程中,请根据操作系统选择正确的安装文件,并按照向导进行安装。

安装完成后,你可以在命令行界面中输入"tclsh"来启动TCL解释器,并进入TCL编程环境。

2. TCL脚本的基本结构和语法一个TCL脚本通常由一系列的命令组成,每条命令占据一行。

TCL命令以"$"符号开头,如"$command argument1 argument2"。

TCL的注释以"#"符号开头,后面的内容将被忽略。

以下是一个简单的TCL脚本示例:```tcl#!/usr/bin/tclsh# 输出Hello World!puts "Hello World!"```3. 变量和数据类型TCL支持多种数据类型,包括整数、浮点数、字符串、列表和字典等。

你可以使用"set"命令定义一个变量,并使用"$"符号在其他地方引用该变量。

以下是一些例子:```tclset name "Tom"set age 18set pi 3.14159set fruits {apple banana orange}set person(name) "John"```4. 控制流结构TCL提供了常见的控制流结构,如条件语句和循环语句,用于控制程序的执行流程。

以下是一些控制流语句的示例:if语句:```tclif {$age >= 18} {puts "成年人"} else {puts "未成年人"}```while循环语句:```tclset num 1while {$num <= 10} {puts $numincr num}```5. 文件操作TCL提供了一组用于文件操作的命令,如打开文件、读取文件、写入文件和关闭文件等。

Tcl语言基础教程

Tcl语言基础教程
注意路径的描述应该和UNIX相同,使用'/'而不是'\'。
2、置换(Substitution)
set x 10
set y 100 + x
上面命令执行后,y的值是“100 + x”而不是我们期望的110。这是因为Tcl解释器在分析命令时,把所有的命令参数都当作
字符串看待,所以x 被看作了字符串“100 + x”的一部分。如果我们想使用x的值'10' ,就必须告诉Tcl解释器:我们在这里期望的
如果regexp命令后面有参数matchVar和subMatchVar,则所有的参数被当作变量名,如果变量不存在,就会被生成。
regexp把匹配整个正规表达式的子字符串赋给第一个变量,匹配正规表达式的最左边的子表达式的子字符串赋给第二个变
量,依次类推,例如:
regexp { ([0-9]+) *([a-z]+)} " there is 100 apples" total num word 1
都将成为普通字符,失去其特殊意义,Tcl解释器不会对其作特殊处理。
二、Tcl变量数据类型
Tcl只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记
这一点,所有的东西都是字符串。(然而字符串的实际解释是依赖于其所处上下文。它有三种形式:命令, 表达式和表)。
符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string 和formatsting中的字符和'%'必须匹配。例如:
scan "some 26 34" "some %d %d" a b

五分钟学Tcl

五分钟学Tcl

五分钟学TclConcept 1: 程序是由命令(command)组成的Tcl语言最基本的概念是:命令。

程序是由一条接一条的命令构成的。

举例来说,设置变量’a’为5,并且打印它的值,你写两条命令:set a 5puts $a命令是以空格分隔的单词组成的。

一条命令以换行符或分号(‘;’)结尾。

在Tcl 中,万事皆命令 – 正如你看到的那样,Tcl中并没有赋值符。

要给一个变量赋值,需要用set命令,它将第一个参数所指定的变量,赋值为第二个参数所指定的值。

几乎所有的Tcl命令都会返回一个值,比如set命令返回的值就是其所赋的值。

如果set命令仅指定一个参数(变量名),那么其返回值就是该变量的当前值Concept 2: 命令替换(Command subsitution)其次的概念是:命令替换。

在一个命令中,某些参数可能出现在[ ]中。

这种情况下,参数被替换成[ ]中代码的返回值。

例如:set a 5puts [set a]第二条命令的第一个参数,[set a],会被替换成“set a”的返回值(即 5)。

在替换之后,这条命令就从puts [set a]转换成puts 5然后,它被正常执行。

Concept 3: 变量替换(Variable subsitution)如上例,总是用set命令来引用变量值显得太冗长了些,因此Tcl早期版本就已经引入了新的变量替换的概念。

如果一个变量名前面加上 $ 字符,那么它被替换成该变量的值。

所以,就没有必要用puts [set a]而可以使用puts $aConcept 4: 组(Grouping)如果命令由空格分隔的单词构成,那么如何处理包含空格的参数呢?比如:puts Hello World是一条不正确的语句,因为Hello和World是两个独立参数。

解决方式是分组(grouping)。

包含在""中的文本被认为是单个参数,所以正确的语句是:puts "Hello World"命令替换和变量替换在这种分组中也是有效的,比如我可以写:set a 5set b foobarputs "Hello $a World [string length $b]"结果是"Hello 5 World 6". 另外,转义字符如\t, \n 仍然有效.还有另一种Grouping方式,这种方式下所有的特殊字符都只有其字面含义,而不会发生变量替换。

绝对最适合初学者的教程-TCL脚本入门教程

绝对最适合初学者的教程-TCL脚本入门教程
puts "$Z_LABEL {$Z}" ;#最外层是双引号,所以进行了置换
puts {Who said, "What this country needs is a good $Z cigar!"?} ;#最外层是花括号,所以没有进行置换
puts "\n................. examples of escape strings"
puts "$Z_LABEL $Z" ;#显示The Capitol of New York is:Albany
puts {$Z_LABEL $Z} ;#显示$Z_LABEL $Z,没有进行置换,{}中不会置换
puts "\n....... examples of differences in nesting \{ and \" "
2.8第8课:数值比较-IF应用10
2.9第9课:WHILE循环11
2.10第10课:FOR循环和incr11
2.11第11课:过程PROC12
2.12第12课:过程PROC的参数定义13
2.13第13课:变量的作用域13
2.14第14课:LIST结构14
2.15第15课:LIST项的增删改15
2.16第16课:更多LIST相关16
2.40第40课:socket & fileevent & vwait49
2.41第41课:日期时间-clock51
2.42第42课:i/o通道-fblocked & fconfig53
2.43第43课:子解释器55
2.44第44课:数据库操作57
3跋60
1
1.1

《tcl入门培训》课件

《tcl入门培训》课件

正则表达式
了解正则表达式的语法和使用,以及在TCL中 如何应用。
文件和目录操作
学习如何在TCL中进行文件和目录的读写操作。
网络编程
掌握在TCL中进行网络编程的基本方法。
多线程编程
了解如何在TCL中使用多线程实现并发编程。
第四部分:TCL与其他语言的结合
本部分将介绍TCL与其他编程语言的结合,包括TCL和C语言、TCL和Python、TCL和Perl的结合,并 通过演示案例展示它们的应用。
了解如何使用TCL与数据库进行交互,实现 数据的存储和检索。
TCL应用开发案例分析
通过实际案例分析,展示TCL在应用开发中 的优势和实际应用场景。
第六部分:TCL最佳实践
本部分将介绍TCL编程的最佳实践,包括编程规范、代码调试技巧、性能优化技巧以及最佳实践案例分 享。
1 TCL编程规范
学习编写清晰、可维护的TCL代码的规范 和风格。
第五部分:TCL应用开发
本部分将介绍TCL的应用开发,包括GUI应用开发、WEB应用开发和数据库应用开发,并通过案例分析 展示其实际应用。
TCL的GUI应用开发
学习如何使用TCL开发图形界面应用程序。
TCL的WEB应用开发
掌握如何使用TCL开发WEB应用程序,构建 动态网页。
TCL的数据库应用开发
2 TCL代码调试技巧
掌握TCL代码的调试方法,以快速定位问 题并进行修复。
3 TCL性能优化技巧
了解如何优化TCL代码的性能,提升程序 执行效率。
4 TCL最佳实践案例分享
通过实际案例分享,了解TCL在不同场景 下的最佳实践。
结束语
TCL是一门强大而灵活的脚本语言,在不同领域都有广泛的应用。本课程提供了TCL的全面介绍 和学习资源推荐,希望能够帮助你深入掌握TCL编程。

Tcl编程教程(详细)

Tcl编程教程(详细)

Tcl编程初步编辑版本: 1.5日期:2004-3-2著者:陈涛上海贝尔阿尔卡特有限公司Tcl 编程初步总目录总目录................................................................................ . (I)例索引................................................................................ .. (IV)表索引................................................................................ .. (VI)图索引................................................................................ . (VII)第 1 章. TCL基本知识................................................................................ .. (1)1.1 什么是T CL................................................................................ (1)1.2 T CL自学工具................................................................................. (1)1.3 T CL软件包................................................................................. (2)1.4 T CL命令格式................................................................................. (2)1.5 T CL脚本文件和SOURCE 命令................................................................................. .. (3)1.6 可执行脚本文件(E XECUTABLEF ILE).............................................................................. . (3)1.7 获得帮助................................................................................. . (4)1.7.1 Windows系统................................................................................. . (4)1.7.2 Unix系统................................................................................. (4)第 2 章. 输出、赋值与替换................................................................................ (5)2.1 PUTS............................................................................... .. (5)2.2 SET & UNSET............................................................................... . (5)2.3 替换................................................................................. .. (6)2.3.1 $.................................................................................. .. (6)2.3.2 []................................................................................. .. (6)2.3.3 " " 和{}................................................................................. .. (6)2.3.4 \.................................................................................. .. (7)第 3 章. 数学表达式与EXPR命令................................................................................ .. (8)3.1 数学和逻辑运算符................................................................................. (8)3.2 数学函数................................................................................. . (8)3.3 数学运算举例................................................................................. . (9)3.4 INCR命令................................................................................. . (9)第 4 章. 字符串................................................................................ (10)4.1 基本命令集................................................................................. (10)4.2 APPEND命令................................................................................. .. (10)4.3 FORMAT命令................................................................................. .. (10)4.3.1 format命令说明................................................................................. (10)4.3.2 format举例................................................................................. .. (11)4.4 SCAN命令................................................................................. .. (12)4.5 BINARY命令................................................................................. (13)4.6 SUBST命令................................................................................. (14)4.7 STRING 命令................................................................................. (15)4.7.1 string 命令列表................................................................................. (15)4.7.2 字符串比较................................................................................. . (16)4.7.3 string match字符串匹配................................................................................. .. (16)4.7.4 字符串替换................................................................................. . (18)4.7.5 字符类别(class)测试................................................................................. . (18)4.7.6 字符串映射................................................................................. . (19)i Tcl 编程初步第 5 章. TCL列表操作................................................................................ (20)5.1 列表命令集................................................................................. (20)5.2 LIST命令................................................................................. . (20)5.3 CONCAT命令................................................................................. . (21)5.4 LAPPEND命令................................................................................. (21)5.5 LLENGTH 命令................................................................................. . (22)5.6 LINDEX命令................................................................................. . (22)5.7 LRANGE命令................................................................................. .. (22)5.8 LINSERT 和LREPLACE命令................................................................................. .. (22)5.9 LSEARCH命令................................................................................. . (23)5.10 LSORT命令................................................................................. .. (24)5.11 JOIN与SPLIT命令................................................................................. . (24)5.12 FOREACH控制结构................................................................................. . (27)第 6 章. 数组................................................................................ .. (28)6.1 数组的定义与格式................................................................................. . (28)6.2 数组变量................................................................................. . (29)6.3 多维数组................................................................................. . (29)6.4 数组操作命令................................................................................. .. (30)6.4.1 array get命令................................................................................. (30)6.4.2 array names命令................................................................................. . (30)6.4.3 遍历数组................................................................................. . (31)6.4.4 用数组定义结构................................................................................. .. (31)第7 章. 控制结构命令................................................................................ .. (32)7.1 IF/ELSE命令................................................................................. . (32)7.2 FOR命令................................................................................. . (33)7.3 WHILE命令................................................................................. .. (33)7.4 BREAK 与CONTINUE命令................................................................................. .. (34)7.5 SWITCH命令................................................................................. (34)7.6 CATCH 命令................................................................................. (35)7.7 ERROR命令................................................................................. . (36)7.8 RETURN 命令................................................................................. (37)7.9 EXIT命令................................................................................. . (37)第8 章. 过程与作用域................................................................................ .. (38)8.1 PROC—过程定义命令................................................................................. .. (38)8.2 作用域................................................................................. (40)8.2.1 过程的作用域................................................................................. (40)8.2.2 变量的作用域................................................................................. (40)8.3 UPVAR命令................................................................................. . (42)8.4 RENAME命令................................................................................. . (44)8.5 特殊变量................................................................................. . (45)8.5.1 命令行参数................................................................................. . (45)8.5.2 env--环境变量数组................................................................................. (45)8.6 EVAL命令................................................................................. (46)8.7 UPLEVEL命令................................................................................. (48)第9 章. 正则表达式(REGULAR EXPRESSIONS) (49)9.1 REGEXP命令................................................................................. .. (49)9.2 REGSUB命令................................................................................. (51)9.3 正则表达式的语法................................................................................. . (52)ii Tcl 编程初步9.3.1 分支(branch)和原子(atom)............................................................................. . (52)9.3.2 基本语法................................................................................. . (52)9.3.2.1 匹配字符.......................................................................................... .. (52)9.3.2.2 限定匹配.......................................................................................... .. (53)9.3.2.3 方括号表达式与字符集.......................................................................................... .. (53)9.3.2.4 匹配分支.......................................................................................... .. (54)9.3.2.5 量词(Qulifier)................................................................................ (54)9.3.2.6 子模式与匹配报告捕获.......................................................................................... .. (55)9.3.2.7 反斜杠引用.......................................................................................... . (56)9.3.2.8 匹配优先级.......................................................................................... . (56)9.3.3 高级正则表达式(AREs)........................................................................... .. (57)9.3.3.1 反斜杠换码(escape)序列.......................................................................................... (57)9.3.3.2 归整元素(collating element).................................................................................... .. (57)9.3.3.3 等价类(equivalence class)...................................................................................... (58)9.3.3.4 字符类(character class)...................................................................................... (58)9.3.3.5 非贪婪量词.......................................................................................... . (59)9.3.3.6 约束量词.......................................................................................... .. (59)9.3.3.7 回退引用.......................................................................................... .. (59)9.3.3.8 前瞻(lookahead)................................................................................. (60)9.3.3.9 换行符敏感的匹配.......................................................................................... . (60)9.3.3.10 嵌入式选项.......................................................................................... . (60)9.3.3.11 扩展语法.......................................................................................... (60)9.3.4 语法小结................................................................................. . (60)9.3.5 其它支持正则表达式的命令................................................................................. .. (60)第10 章. 名字空间................................................................................ (62)10.1 创建名字空间................................................................................. . (62)10.2 用::限定符来使用变量和过程................................................................................. . (62)10.3 名字空间的变量................................................................................. (63)10.4 过程的进口与出口................................................................................. (64)10.5 内省(INTROSPECTION)...................................................................... .. (65)10.6 名字空间命令集................................................................................. (65)第11 章. 跟踪与调试................................................................................ .. (67)11.1 CLOCK命令................................................................................. (67)11.1.1 clock clicks命令................................................................................. (67)11.1.2 clock seconds命令................................................................................. (67)11.1.3 clock format命令................................................................................. (68)11.1.4 clock scan命令................................................................................. . (70)11.2 INFO 命令................................................................................. . (71)11.2.1 info level.............................................................................. (72)11.2.2 info exists............................................................................. (72)11.3 TRACE命令................................................................................. . (73)11.3.1 trace variable........................................................................... (73)11.3.2 trace vdelete............................................................................ (75)11.3.3 trace vinfo.............................................................................. (75)第12 章. 脚本库与软件包................................................................................ . (76)12.1 声明和使用软件包................................................................................. (76)12.1.1 软件包定位................................................................................. . (76)12.1.2 声明软件包命令................................................................................. .. (76)12.1.3 加载软件包命令................................................................................. .. (76)12.1.4 自动加载与软件包索引................................................................................. (77)12.1.5 用链接库提供软件包................................................................................. . (79)iii Tcl 编程初步12.2 PACKAGE命令集................................................................................. . (80)12.3 小结................................................................................. .. (80)第13 章. 文件操作与程序调用................................................................................ (81)13.1 文件操作................................................................................. (81)13.1.1 文件I/O................................................................................ (81)13.1.2 文件系统信息命令................................................................................. .. (82)13.1.2.1 glob命令.......................................................................................... . (83)13.1.2.2 file命令集.......................................................................................... . (83)13.2 程序调用................................................................................. (85)13.2.1 用open命令打开一个进程管道 (85)13.2.2 用exec命令调用程序................................................................................. . (87)13.2.3 pid命令................................................................................. .. (88)第14 章. 套接字与事件驱动编程简介................................................................................ . (89)14.1 套接字编程................................................................................. .. (89)14.1.1 socket命令.................................................................................14.1.1.1 Client端socket命令.......................................................................................... .. (89)14.1.1.2 Server端socket命令选项.......................................................................................... (90)14.1.2 用fconfigure配置套接字................................................................................. . (90)14.1.3 C/S编程举例................................................................................. (90)14.2 事件驱动编程................................................................................. . (93)14.2.1 after命令................................................................................. .. (93)14.2.2 fileevent命令................................................................................. . (96)14.2.3 vwait命令................................................................................. . (96)14.2.4 fconfigure命令................................................................................. . (97)14.2.4.1 fconfigure语法.......................................................................................... .. (97)14.2.4.2 非阻塞I/O......................................................................................... .. (98)14.2.4.3 缓冲.......................................................................................... . (98)参考文献................................................................................ . (100)例索引例 1-1 输出一段字符串的例子.............................................................................例 1-2 source命令的简单例子............................................................................. (3)例 2-1 输出一个词的例子............................................................................. (5)例 2-2 参数定义、赋值与参数值引用............................................................................. (5)例 2-3 嵌套$用做替换操作............................................................................. (6)例 2-4 命令替换[]的例子............................................................................. (6)例 2-5 {}替换的例子............................................................................. (6)例 2-6 \的例子............................................................................. (7)例 2-7 不规范的续行............................................................................. (7)例 3-1 数学运算举例............................................................................. (9)例 4-1 append命令的简单例子............................................................................. (10)例 4-2 位置说明符的例子............................................................................. (11)例 4-3 format命令的简单例子............................................................................. (11)例 4-4 scan命令的简单例子............................................................................. (12)例 4-5 体验binary format 和binary scan的作用 (13)例 4-6 binary命令的简单应用.............................................................................例 4-7 subst命令的简单例子............................................................................. .. (14)例 4-8 string compare 和string equal进行字符串比较的例子 (16)iv Tcl 编程初步例 4-9字符串替换简单例子............................................................................. (18)例 5-1 使用list命令创建列表............................................................................. (20)例 5-2 concat命令的例子............................................................................. (21)例 5-3 lappend命令简单例子............................................................................. (21)例 5-4 llength命令的一个简单例子............................................................................. (22)例 5-5 lindex命令的一个简单例子............................................................................. (22)例 5-6linsert和lreplace命令的例子............................................................................. (22)例 5-7 lsearch命令的简单例子............................................................................. (23)例 5-8 lsearch与lreplace结合删除列表元素 (23)例 5-9 lsort命令简单的例子............................................................................. (24)例 5-10 split命令例子............................................................................. (24)例 5-11空元素与独立字符元素的split例子............................................................................. (24)例 5-12 用ldel删除指定元素............................................................................. (25)例 5-13 根据步长调整MAC地址值............................................................................. (25)例 5-14 foreach的简单例子:依次打印列表元素 (27)例 5-15具有多个值列表的foreach命令处理过程 (27)例 6-1 认识数组............................................................................. (28)例 6-2 混淆普通变量和数组时的错误例子............................................................................. (29)例 6-3 通过替换间接使用数组变量............................................................................. (29)例 6-4 数组和列表互换............................................................................. (30)例 6-5 array names的简单例子............................................................................. (31)例 6-6 遍历数组的一个方法举例............................................................................. (31)例 6-7 用数组来定义结构............................................................................. (31)例 7-1 if/else控制命令的简单例子............................................................................. (32)例 7-2 一个for循环............................................................................. (33)例 7-3 while循环的例子............................................................................. (34)例 7-4 switch 命令的简单例子............................................................................. (34)例 7-5 switch语句中不当注释引起的错误...............................................................................35例 7-6用catch捕获命令错误信息............................................................................. (35)例 7-7 error命令的例子............................................................................. (36)例 7-8用return命令从过程中返回............................................................................. (37)例 8-1 带有默认参数的过程定义............................................................................. (38)例 8-2 不定输入参数过程的例子............................................................................. (39)例 8-3参数名+参数值成对输入的过程定义............................................................................. (39)例 8-4 过程的定义............................................................................. (40)例 8-5 变量的作用域............................................................................. (40)例 8-6 全局变量与局部变量的关系............................................................................. (41)例 8-7 用”::”来声明全局变量............................................................................. (41)例 8-8 upvar命令的例子............................................................................. (42)例 8-9 通过upvar命令来传递数组............................................................................. (44)例 8-10 用rename命令来取消一个命令............................................................................. (44)例 8-11 打印命令行参数信息............................................................................. (45)例 8-12 用eval创建新命令的简单例子............................................................................. (46)例 8-13 动态定义过程............................................................................. (47)例 8-14 uplevel的简单例子............................................................................. (48)例 9-1 regexp的简单例子............................................................................. (50)例 9-2 用regsub进行字符串替换的简单例子 (5)1例 9-3 匹配挂靠的简单例子............................................................................. . (53)例 9-4 字符集匹配的例子............................................................................. .. (53)例 9-5 使用量词*和?不当引起的错误............................................................................. .. (55)v Tcl 编程初步例 9-6子模式捕获............................................................................. (55)例 9-7屏蔽子模式报告............................................................................. (55)例 9-8子模式综合运用的例子:搜索脚本文件中定义的过程 (55)例 9-9 归整元素匹配字符串............................................................................. (58)例 9-10字符类的简单例子............................................................................. (58)例 10-1定义名字空间Counter:....................................................................... (62)例 10-2 动态定义名字空间............................................................................. (62)例 10-3 限定名比较的简单例子............................................................................. (63)例 10-4 名字空间自动处理引用变量的归属............................................................................. (64)例 10-5 过程的进口与出口的简单例子............................................................................. (64)例 10-6 namespace origin命令例子............................................................................. (65)例 11-1计算系统时钟滴答数............................................................................. (67)例 11-2clock format在windows上的简单例子 (69)例 11-3 Tcl识别的系统编码方式............................................................................. (69)例 11-4 消除clock format输出中的乱码............................................................................. (70)例 11-5 用info测试变量是否存在............................................................................. (71)例 11-6 用info level命令控制过程的循环嵌套 (72)例 11-7 用trace variable跟踪变量的简单例子 (73)例 11-8 trace vinfo 的例子............................................................................. . (75)例 12-1 auto_path的内容与操作............................................................................. (76)例 12-2 pkg_mkIndex命令............................................................................. . (77)例 12-3 简单的软件包加载的例子............................................................................. . (78)例 13-1用open命令打开文件,并输入数据.............................................................................82例 13-2 lstat和 stat命令举例............................................................................. . (84)例 13-3 用open命令打开只读进程管道............................................................................. (86)例 13-4 用open命令打开进程管道又一例............................................................................. . (86)例 13-5 用exec处理管道与I/O重定向............................................................................. .. (87)例 13-6 用pid命令检查进程ID............................................................................. . (88)例 14-1基于socket实现的C/S(Client/Server)简单模型 (90)例 14-2 after 命令的简单应用............................................................................. (94)例 14-3vwait命令的简单例子............................................................................. (97)。

TCL培训教程2024

TCL培训教程2024

引言:TCL培训教程(二)作为继TCL培训教程(一)之后的延续,旨在进一步深入介绍TCL脚本语言的各个方面。

本文将通过引言概述、正文内容和总结来详细探讨TCL的高级特性与应用,并提供详细的示例和实践指导。

概述:在本文中,我们将重点介绍TCL中的5个大点,包括TCL脚本的文件操作、正则表达式的使用、错误处理和异常处理、TCL的面向对象编程以及和其他编程语言的互操作性。

每个大点将包含5-9个小点,以便更全面地探讨TCL的各个方面。

正文内容:一、TCL脚本的文件操作:1. 文件读取和写入操作:介绍如何使用TCL脚本读取和写入文件,并讨论文件的打开和关闭操作。

2. 文件操作函数:详细介绍TCL中用于文件操作的常用函数和命令,如文件重命名、文件删除等。

3. 文件路径处理:讨论如何处理文件路径,包括相对路径和绝对路径的转换。

4. 文件权限和属性:介绍如何获取和修改文件的权限和属性信息,以及相关的TCL命令。

5. 文件夹操作:介绍如何操作文件夹,包括创建文件夹、删除文件夹以及遍历文件夹内的文件。

二、正则表达式的使用:1. 正则表达式的基本语法:介绍正则表达式的基本语法和元字符的使用方法。

2. 正则表达式的匹配与替换:详细探讨如何使用TCL的正则表达式进行字符串的匹配和替换。

3. 正则表达式的捕获组:介绍如何使用捕获组来提取正则表达式匹配的子串。

4. 正则表达式的高级应用:探讨正则表达式在TCL中的高级应用,如贪婪匹配、非贪婪匹配等。

5. 正则表达式的性能优化:讨论如何优化正则表达式的性能,避免正则表达式的过度复杂。

三、错误处理和异常处理:1. 错误处理的基本概念:介绍错误处理的基本概念和原则,以及TCL内置的错误处理机制。

2. 错误处理命令:详细介绍TCL中的错误处理命令,如catch、error、return等。

3. 异常处理的基本原则:讨论异常处理的基本原则和最佳实践。

4. 异常处理命令:介绍TCL中的异常处理命令,如try、throw等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TCL学习记录最近学习了tcl,有一些体会,写出来供大家一起交流和切磋!p.s.:由于鄙人只是用tcl进行常规流程控制和仿真验证平台的搭建,因此涉及到较为高级的用法以及tk界面的东东就没有涉猎,如果有哪位仁兄对高级用法很有心得,可以与我联系哦。

Note:鄙人此处挑拣了tcl中较为基本,也是十分实用的几个方面做粗略描述,后面还提出了一个较小的工程设计。

虽然不是很完整,但个人认为麻雀虽小,五脏也是聚全了^_^。

细节性的东西还劳烦大家参考active state的tcl manual。

一.Tcl是一种基于字符串的、解释性命令的语言,语法规则简单、易学。

Variable substitution: $, nestableCommand substitution: [], 其实,有了command substitution实际上就表示命令可以嵌套,即:一个命令的结果可以作为别的命令的参数。

Backslash substitution: \, 与c语言类似,反斜杠主要用于在字符中插入诸如换行符、空格、[、$等被tcl解释器当作特殊符号对待的字符。

双引号和花括号除反斜杠歪,tcl提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符。

Tcl 解释器对双引号中的各种分隔符将不做处理,但是对换行符以及$、[]两种置换符还会做特殊处理。

而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义。

二、数组数组是一些元素的集合。

Tcl的数组和普通的计算机语言中的数组有很大的区别。

在tcl中,不能单独申明一个数组,数组只能和数组元素一起申明。

(感觉更像是c语言中的结构体)tcl不支持复杂的数据类型,这一点是tcl受指责最多的方面。

e.g.:set day(Monday) 1set day(Tuesday) 2数组的置换和简单的变量置换类似:e.g.:set a Mondayset day(Monday) 1set b $day(Monday) //b的值为1,即day(Monday)set c $day($a) //c的值为1,即day(Monday)三、listList这个概念在tcl中是用来表示集合的。

Tcl中list是由一堆元素组成的有序集合,list可以嵌套定义,list每个元素都可以是任意字符串,也可以是list。

e.g.:{} //空list{a b c d} //4个元素构成的list{a {b c} d} //3个元素构成的list,其中第二个元素本身就是一个listList是tcl中比较重要的一种数据结构,对于编写复杂的脚本有很大的帮助。

相对简单的list命令有:Lrange/lappend/linsert/lreplace/llength/lindex/concat/list相对复杂,功能更强的list命令:Syntax: lsearch ?-exact? ?-glob? ?-regexp? List pattern返回值为list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。

-glob, -exact, -regexp是三种模式匹配技术。

缺省时使用-glob。

-exact表示精确匹配;-glob的匹配方式和string match命令的匹配方式相同;-regexp表示正则表达式匹配。

四、局部变量和全局变量对于过程(procedure)中定义的变量,因为它们只能在过程中被访问,并且在过程退出时会被自动删除,所以称为局部变量;在所有过程之外定义的变量称为全局变量。

Tcl中,局部变量可以和全局变量同名,两者作用域的交集为空;局部变量的作用域是它所在过程的内部;全局变量的作用域则不包括所有过程的内部。

(注意:这一点和c语言有很大的不同)如果想在过程内部引用一个全局变量的值,可以使用global命令。

五、缺省参数和可变个数参数Tcl提供三种参数形式:首先,可以定义一个没有参数的过程,例如: proc add {} {expr 1 +2}其次,可以定义具有缺省参数值的过程,可以为过程的全部和部分参数提供缺省值,如果调用过程时未提供那些参数的值,那么过程会自动使用缺省值赋给相应的参数。

和c/c++中具有缺省参数值的函数一样,有缺省值的参数只能位于参数列表的尾端。

即:在第一个具有缺省值的参数后面的所有参数,都只能时具有缺省值的参数。

例如:Proc add {arg1 {arg2 2} {arg3 3}} {Expr $arg1 + $arg2 +$arg3}另外,tcl的过程定义还支持可变个数的参数,如果过程的最后一个参数是args,那么就表示这个过程支持可变个数的参数。

位于args之前的参数像普通参数一样处理,但任何附加的参数都需要在过程体中作特殊处理,过程的局部变量args将会被设置为一个列表,其元素就是所有附加的变量。

如果没有附加的变量,args就设置为一个空串,如下:Proc add {arg1 args} {Set sum $arg1Foreach I $args {Incr sum $i}Return $sum}则:add 2 //返回值为2Add 2 3 4 5 6 //返回值为20六、引用upvar命令语言:upvar ?level? othervar myvar ?otherva r myvar …?Upvar命令使得用户可以在过程中对全局变量或其他过程中的局部变量进行访问。

Upvar命令的第一个参数othervar是我们希望以引用方式访问的参数名字;第二个参数myvar是这个过程中的局部变量的名字,一旦使用了upvar命令将othervar和myvar绑定,那么在过程中对局部变量myvar的操作就相对于对这个过程中绑定的othervar的操作。

e.g.:proc temp {arg} {upvar $arg bset b [expr $b +2]}Proc myexp {var} {Set a 4Temp aReturn [expr $var + $a]}则:myexp 7 的返回值为13。

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

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

例如:upvar 2 other x,这个命令使得当前调用者的调用者中的变量other,可以在当前过程中用变量x访问。

Level的缺省值为1,如果要对全局变量以upvar绑定,可以用upvar #0 other x。

提醒:upvar和global的区别在于:后者只能对全局变量绑定,而前者可以对与当前过程任何级别上的调用者内部变量进行绑定。

七、文件访问Tcl提供了丰富的文件操作命令,通过这些命令可以对文件名进行操作,以顺序或随机方式读写文件。

检索系统保留的文件信息等。

Tcl中表示目录结构时用‟/‟,而不是‟\‟,这和tcl最初实在linux下实现有关。

(说道这里,我对win平台下的active tcl还是很愤然的,一个简单的交互式命令竟然在这个下面不支持,弄得初学tcl的我倍受打击,后来在linux环境下测试了一把,一样的代码正常完成我要的功能,看来win平台还是不能发挥它最大的功能)。

1、基本的文件输入、输出命令Open name ?access?Open命令以access方式打开name,返回供其他命令(gets,close等)使用的文件标识。

如果neme的第一个字符是‟|‟,管道命令被触发,而不是打开文件。

Open命令返回一个字符串用于表示打开的文件,当调用其他命令对打开的文件操作时,需要使用整个文件标识符。

Tcl有三个特定的文件标识符:stdin, stdout, stderr,分别对应标准输入、标准输出和错误通道。

任何时候都可以使用这三个文件标识。

Gets fileId ?varname?读fileId标识的文件的下一行,忽略换行符。

如果命令中有varname,就把该行赋给它,并返回该行的字符数(若到文件尾则返回-1)。

如果没有varname参数,返回文件的下一行作为命令结果(如果到了文件尾,就返回空字符串)和gets命令类似的read,不过read不是以行为单位的,它有两种形式:Read ?-nonewline? fileId读并返回fileId标识的文件中所有剩下的字节,(从文件内偏移点开始,后续整个文件都读出,如果没有nonewline选项,则返回的文件内容不换行,否则会加入换行符)通常来讲,如果是合并几个文件,不希望文件之间有换行符隔开,就需要将nonewline选项打开。

Puts ?-nonewline? ?fileId? stringPuts命令把string写到fileId中,如果没有nonewline开关,则添加到新一行中(自动加换行符)。

FileId的默认是stdout。

命令返回值为一空字符。

Puts命令使用c的标准I/O库的缓冲区方案,这就意味着使用puts命令产生的信息不会立即出现在目标文件中。

如果想使数据立即出现在文件中,那就需要调用flush命令。

Flush fileId把缓冲区内容写到fileId标识的文件中,命令返回值为空字符串。

Flush命令迫使缓冲区数据写到文件中。

Flush直到数据被写完才返回。

当文件关闭时缓冲区数据会自动flush。

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

2、随机文件访问默认文件输入输出方式是连续的;即每个gets或read命令返回的是上次gets和read访问位置后面的字节,每个puts命令写数据是接着上一次puts写的位置接着写。

Tcl提供了seek,tell和eof 等命令使用户可以非连续访问文件。

每个打开的文件都有访问点,即下次读写开始的位置。

文件打开时,访问点总是被设置为文件的开头或结尾,这取决于文件打开时使用的访问模式。

每次读写后访问位置按访问的字节数后移相应的位数。

可以用seek命令来改变文件的访问点:seek fileId offset ?origin?Origin可以是start,current和end。

默认是start。

Tell fileId 返回fileId标识的文件的当前访问位置Eof fileId 如果到达fileId标识的文件的末尾,则返回为1,否则返回为03、文件名操作及获取文件信息Tcl提供了两个命令进行文件名操作:glob和file,用来操作文件或获取文件信息Glob命令采用一种或多种模式作为参数,并返回匹配这些模式的所有文件列表。

相关文档
最新文档