TCL_TK进阶练习
TCL自动化测试脚本语言编程试题(附答案) - 副本

一填空题(每题2分,共10分)1.以下对自动化测试描述不正确的是?A.自动化测试可替代手工测试B.自动化测试发现的故障数不及手工测试C.自动化测试对测试质量的依赖性大D.自动化测试应在周期长的项目中引入2.自动化测试分析时,不该做的分析是下面哪一个?A.可行性分析B.测试需求分析C.抽样demo分析D.软件成本分析3.下列对自动化测试用例设计原则描述中,不正确的是?A.自动化测试用例的选择一般以“反向”为主B.自动化测试用例的范围往往是核心业务流程C.不是所有的手工测试用例都可以使用自动化测试来实现D.自动化测试用例不需要每个步骤都输出预期结果4.自动化测试工具QTP支持的语言是下面哪一种?A.JavaB.RubyC.PythonD.VBScript5.QTP工具中用于实现QTP说明书功能的是哪个键?A.F1B.F2C.F3D.F5二简答题(每题5分,共50分)注:为区分特殊符号,本次考试需要打印输出的内容在卷面中以粗斜体显示!1.自动化测试中,测试脚本可分为哪5种?1)线性脚本2)结构化脚本3)可共享脚本4)数据驱动脚本5)关键字驱动脚本2.自动化测试优势1)回归测试更方便、可靠;2)可运行更多、繁琐的测试,且高校、快速;3)可执行一些对于手工测试来说相当困难或根本做不到的测试;4)更好的利用资源,使资源的使用更有价值;5)具有一致性和可重复性;6)自动化测试脚本完全具有服用性;7)使软件更有信任度;8)多环境下测试;3.画出自动化测试流程图:4.打印输出“Hello Tcl!”;% puts "Hello Tcl!"5.定义变量a=10、b=20、c=a*b,输出变量c;% set a 10% set b 20% set c [expr $a * $b]6.计算字符串“My name is TCL”的长度;% puts stdout "The length of \"$a\" is: [string length $a]"7.已知本地E:\TCL\TCL_setup目录下存在脚本文件exec.tcl,请给出调用该脚本的方法;% cd E:\\TCL\\TCL_setup% source exec.tcl8.对数字5进行左移2位运算,并将计算结果赋值给变量n;% set n [expr 5<<2]9.计算2^16,并将结果取整显示;% expr int(pow(2,16))10.取5-10之间的随机数;% set min 5% set max 10% expr int(rand()*($max-$min+1)+$min)11.将字符串“again”追加至变量a尾部,输出追加后的字符串“see u again”;% set a "see u"% set b again% append a \ $bsee u again12.重新排列字符串"love" "game" "i" "this" "!";% set var1 [format "%3\$s %1\$s %4\$s %2\$s %5\$s" "love" "game" "i" "this" "!"]13.提取数字1-20中的质数,并按照升序排列输出;% set res [format "%1\$s %3\$s %5\$s %7\$s %11\$s %13\$s %17\$s %19\$s" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]14.用科学计数法表示数字80000,并记录在由ascii码转换后的符号()内;% set c [format %c%e%c 40 80000 41](8.000000e+004)15.获得字符串“hello”中字符e的整数值;% binary scan "hello" "cc" var1 var2% puts $var216.将字符串“sorry”中的字符o替换为字符@;% string replace sorry 1 1 @17.已知列表a [my name is tom],输出列表中的tom字符串;% set a "my name is tom"% puts [lindex $a 3]18.使用列表遍历指令输出下面内容:我喜欢吃: 苹果我喜欢吃: 梨子我喜欢吃: 香蕉我喜欢吃: 西瓜set fruit {苹果梨子香蕉西瓜}foreach f $fruit {puts "我喜欢吃: $f"}19.遍历列表输出下面内容:学号=1 姓名=tom 年龄=23 班级=C1学号=2 姓名=jack 年龄=22 班级=C2学号=3 姓名=nacy 年龄=21 班级=C3学号=4 姓名=peter 年龄=22 班级=C4set id {1 2 3 4}set name {tom jack nacy peter}set age {23 22 21 22}set classes {C1 C2 C3 C4}foreach a $id b $name c $age d $classes {puts [format "学号=%-s 姓名=%-s 年龄=%-s 班级=%-s" $a $b $c $d] }20.已知整数123,分别取出个位数,十位数和百位数;% set i 123% set a [expr $i/100]% set b [expr $i%100/10]% set c [expr $i%10]% puts $a,$b,$c21.将下列代码未完成的地方补充完整;set ids(a) 192set ids(b) 168set ids(c) 5set ids(d) 100set lst [ array get ids ]puts $lstforeach { x y } $lst {puts "x:$x y:$y"}提示:以上代码输出结果为:x:4 y:100x:2 y:168x:3 y:522.使用if语句实现功能:变量a为10,变量b为20,若a+b>20,输出结果,反之给出错误提示信息“Error”;set i 10set j 20if {[expr $j+$i]>20} {set x [expr $i+$j]puts $x} else {puts "Error"}三代码编程题(每题10分,共40分)1.求水仙花数(水仙花数是个三位数,比如153,这个数具有个特点,153=1^3+5^3+3^3) set i 100while {$i<1000} {set a [expr $i/100]set b [expr $i%100/10]set c [expr $i%10]set d [expr int(pow($a,3)+pow($b,3)+pow($c,3))]if {$i==$d} {puts $i}incr i}2.青蛙在一口77米深的井底往上爬,白天爬7米,夜里下落5米,问第几天能爬出井口?set cn 7set day 1while {$cn<=77} {incr cn -5incr day 1incr cn +7}puts $day3.求出1-100之间所有正整数之和,包含1和100;set i 1set sum 0while {$i<=100} {set sum [expr $i+$sum]#set i [expr $i+1]}puts $sum4.输出1-100之间能被5整除的数;set i 1while {$i<=100} {set result [expr $i%5]if {$result==0} {puts $i}incr i}5.打印9行9列左上直角三角形;proc leftup {b} {for {set y 0} {$y<$b} {incr y} {set line ""for {set x 0} {$x+$y<9} {incr x} { append line *}puts $line}}puts [leftup 9]6.编写代码输出十进制转二进制的函数;proc d2b {d} {set bs ""while {$d!=0} {set y [expr $d%2]set d [expr $d/2]set bs $y$bs}return $bs}puts [d2b 77]7.编写代码判断某个1993年是否为闰年;set i 1993set a [expr $i%4]set b [expr $i%100]set c [expr $i%400]if { $a==0 | $b==0 & $c==0 } {puts "\"$i\"年是闰年"} else {puts "\"$i\"年不是闰年"}8.打印9行9列右下直角三角形。
ANSYS-Tcl_Tk-Legacy-Training-2013_02_01

Advanced ANSYS Customization
3/31/01 - 1-
Legacy Training Material Offered with no restrictions and no guarantee of accuracy.
Part 3a: Introduction to the Tcl/Tk Language
What is this Tcl/Tk?
• Tcl/Tk (tickle-T-K) is actually two things
– Tcl (Tool Command Language) is an interpreted scripting language
• Built with extensions in mind • Works well with „C‟ and C++ • Next step after PERL
Set command of button to put up a message box that verifies things.
If the message box answers OK, then destroy the window
Show everything by using a pack on all the items
• Books
– Practical Programming in Tcl and Tk by Brent Welch. Prentice Hall, 1999. 3rd Ed ISBN: 0-13-022028-0. – Tcl and the Tk Toolkit by John Ousterhout, Addison-Wesley, ISBN 0-201-63337-X – Graphical Applications with Tcl and Tk by Eric F. Johnson, M&T Books, 1997, ISBN: 1-55851-569-0 – Tcl/Tk in a Nutshell ISBN 1-56592-433-9. – Effective Tcl/Tk Programming by Mark Harrison and Michael Mclennan, Addison-Wesley, 1997 ISBN: 0-201-63474-0.
TCL&TK大全

命令 [参数 1] [参数 2] [参数 3] [参数 4] ...... [参数 N]
2
Tcl / Tk 大全
脚本化是指 Tcl 为特殊的,特定的任务所设计。但从现在角度看,可以说 Tcl 是一种集 C 语言灵活强大的功能与 BASIC 语言易学高效的风格于一身的通用程序设计语言。
t c l (读作“t i c k l e ”)脚本语言和t k 工具箱是为X Wi n d o w 系统创建图形用户界 面的编程环境。t c l 和t k 非常容易学习和使用,并且利用它们构造用户界面的速度要比利 用传统的X Wi n d o w 编程方法快得多。它最初设计用来为交互式工具提供一种可且在众多的软件产品中被广泛应用。t c l / t k 的真 正功能在于,利用t c l 脚本语言几乎完全可以编写复杂的图形应用程序,因而避开了利用C 语言编写界面时所遇到的界面编程的许多复杂性。
t c l / t k 的正式We b 站点是h t t p : / / w w w. s c r i p t i c s . c o m /。 在这里t c l 平台是S c r i t p i c s 公司的产品。S c r i t p i c s 公司要把t c l 脚本语言推广 到主流的团体中去。S c r i t p i c s 公司提供了开发工具,技术支持和在开发t c l 和t k 公开 代码的软件包是对t c l 实行商业支持服务。该站点还具有下载和安装t c l / t k 最新版本的连 接。目前,可得到的最新t c l / t k 的版本是8 .4a 。 t c l 中的可执行程序t c l ,t c l s h ,w i s h 和t c l h e l p 被Red Hat 的r p m 安装在目 录/ u s r / b i n 中。可以使用t c l h e l p 调出关于t c l 和t k 的帮助信息。系统中也提供了t c l s h 和w i s h 的手册页。
TCL培训教程(全)

TCL培训教程(全)(仅供内部使用)拟制:陈旭盛日期:2000/12/08 审核:日期:yyyy/mm/dd 审核:日期:yyyy/mm/dd 批准:日期:yyyy/mm/dd深圳市华为技术有限公司版权所有侵权必究修订记录目录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注释9 3变量103.1简单变量103.2数组113.3相关命令113.3.1set 113.3.2unset 113.3.3append和incr 12 4表达式124.1操作数124.2运算符和优先级124.3数学函数13 5List 145.1list命令145.2concat命令: 145.3lindex命令155.4llength命令155.5linsert命令155.6lreplace命令: 155.7lrange 命令: 155.8lappend命令: 155.9lsearch 命令: 165.10lsort命令: 165.11split命令: 165.12join命令17 6控制流176.1if命令176.2循环命令:while 、for、 foreach 176.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引用:upvar 21 8字符串操作228.1format命令228.2scan命令238.3regexp命令238.4regsub命令258.5string命令258.5.1string compare ?-nocase? ?-length int? string1 string2 258.5.2string equal ?-nocase? ?-length int? string1 string2 258.5.3string first string1 string2 ?startindex? 268.5.4string index string charIndex 268.5.5string last string1 string2 ?startindex? 268.5.6string length string 268.5.7string match ?-nocase? pattern string 268.5.8string range string first last 278.5.9string repeat string count 278.5.10string replace string first last ?newstring? 278.5.11string tolower string ?first? ?last? 278.5.12string toupper string ?first? ?last? 278.5.13 string 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其他异常3511深入TCL 3711.1查询数组中的元素3711.2 info命令3811.2.1变量信息3811.2.2过程信息3911.2.3命令信息4011.2.4 TCL的版本和库4111.2.5 命令的执行时间4111.2.6 跟踪变量4111.2.7 命令的重命名和删除4311.2.8 unknown命令4411.2.9自动加载44 12历史记录45 13TCL和C\C++ 4713.1生成自己的TCLSH 4813.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++应用程序中嵌入TCL 58 14总结59TCL培训教程(全)关键词:TCL摘要:本文是TCL教材的第三稿,前两稿分别是《TCL的使用》和《TCL培训教程》。
2024版年度TCL培训教程笔记

目录•TCL基础概念与特点•TCL基本语法与数据结构•TCL过程与函数定义调用•TCL扩展功能库使用指南•TCL界面编程技术实践•TCL网络编程应用实例•TCL测试与调试技巧分享TCL基础概念与特点01TCL(Tool Command Language)是一种广泛应用的嵌入式脚本语言。
02发展历程:起源于20世纪80年代,由John Ousterhout教授创建,至今仍在不断更新和发展。
03主要应用于快速原型开发、自动化测试、GUI应用程序等领域。
TCL定义及发展历程TCL语言特性与优势01语言特性简单易学、动态类型、面向对象、可扩展性强。
02优势跨平台兼容性好,易于与C/C等语言集成,提供丰富的库函数和工具。
应用领域及案例分析应用领域自动化测试、网络编程、嵌入式系统开发等。
案例分析如使用TCL进行自动化测试脚本编写,提高测试效率;在嵌入式系统中利用TCL实现动态配置和功能扩展。
开发环境与工具介绍开发环境支持多种操作系统,如Windows、Linux、macOS等。
工具介绍常用的开发工具有Tclsh、Tk、Expect等,分别用于命令行交互、GUI开发和自动化控制。
TCL基本语法与数据结构变量、数据类型与运算符01变量声明与赋值TCL中变量无需事先声明,直接使用`set`命令进行赋值,例如`set x10`。
02数据类型TCL支持多种数据类型,包括整数、浮点数、字符串等。
数据类型之间可以自动转换。
03运算符TCL支持常见的算术运算符(如+、-、*、/)、比较运算符(如==、!=、<、>)和逻辑运算符(如&&、||)。
循环结构TCL提供`for`和`foreach`循环结构,用于重复执行某段代码。
其中,`for`循环可以指定循环次数和步长,`foreach`循环则遍历列表或数组中的元素。
条件语句TCL中使用`if`、`elseif`和`else`关键字构成条件语句,根据条件执行不同的代码块。
Laker TCL 基础训练教材

3.
TCL 基本執行單位:程序 procedure
Syntax:proc Name {argument1 argument2 …} { TCL command body } • 傳回的值是這個程序之中的最後一個指令的結果。 • 若在程序之中使用return 指令的話則是傳回你所要傳出來的結果 Example: proc sum { A B } { set r [ expr $A+$B ] return $r } • 使用上面所完成的程序可直接以下列指令呼叫即可 set result [sum 1 2] • 計算出之結果 3 即為傳回的值 注意:proc之中不要再寫入另一個proc
Laker TCL Extensions
•
•
•
•
Laker會將使用者所有的動作以TCL的語法記錄下來,使用者亦可使用 相同之TCL指令控制Laker,以類似巨集的方式使用,增進工作效率 在 Main Window的訊息欄中可以看到所執行的動作的TCL指令延伸(如 下圖) 你也可以在你的工作目錄下找到 lakerLog的子目錄,所執行過的指令都 會記錄在 <工作目錄>/lakerLog/laker.cmd 如果想要執行此laker.cmd,也可以直接執行command如下: laker –play <工作目錄>/lakerLog/laker.cmd
在 Laker 上執行 TCL
•
在Laker main window可以直接執行TCL的語法
或在 Laker的命令欄執行 source laker.tcl
Laker 自動啟用 TCL 的方法
• 你可以在啟動 Laker 時就自動啟動 TCL 程式 只要在 laker.rc 的設定檔中加入 TCL 程式即可 ... [SourceTcl] Source1 = ./example.tcl Source2 = /home/abc/leoBlockLabel.tcl PS. 修改laker.rc時,laker必須是在關閉的狀況下
TCL编程语言考试及答案

TCL编程语言考试及答案本次TCL编程语言考试共分为三个部分,包括选择题、填空题和编程题。
答案均在文末给出,仅供参考。
选择题TCL是哪一种类型的编程语言?A. 解释型语言B. 编译型语言C. 汇编语言D. 机器语言TCL语言的主要用途是什么?A. 网络编程B. 数据库编程C. 图形用户界面编程D. 批处理编程下面哪个命令可以在TCL中输出一条消息?A. printB. putsC. echoD. writeTCL中的变量名称需要以什么符号开头?A. $B. %C. #D. &下面哪个命令可以在TCL中定义一个变量?A. defineB. varC. setD. declare填空题TCL中的______命令可以将一个字符串转换为一个整数。
TCL中的______命令可以用于循环执行一段代码。
在TCL中,使用______可以将一个字符串进行分割。
TCL中使用______命令可以打开一个文件并读取其中的内容。
在TCL中,使用______命令可以将一个字符串转换为列表。
编程题编写一个TCL程序,实现将一个字符串进行反转并输出的功能。
例如,输入"hello world",输出"dlrow olleh"。
编写一个TCL程序,实现将一个列表中的元素进行去重并输出的功能。
例如,输入{1 2 3 3 4 5 5},输出{1 2 3 4 5}。
编写一个TCL程序,实现将一个文件中的所有单词按照字母顺序排序并输出的功能。
例如,输入文件内容为"hello world",输出"dehllloorw"。
答案选择题:1. A 2. C 3. B 4. A 5. C填空题:1. scan 2. while 3. split 4. read 5. list编程题:1.set str "hello world" set len [string length $str] set result "" for {set i $len} {$i >= 0} {incr i -1} { append result [string index $str $i] } puts $resultPlain Textset nums {1 2 3 3 4 5 5} set result {} foreach num $nums { if {$num ni $res ult} { lappend result $num } } puts $resultPlain Textset file [open "filename.txt" r] set content [read $file] close $file set w ords [split $content] set sorted_words [lsort $words] puts [join $sorted_wo rds ""]CopyCaptionPlain Text。
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语句 ,包括查询、插入、更新和删 除等操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
脚本,对 TCl 程序进行初始化。
2.2.3. Tcl 过程 prn 和 setenv
在初始化文件“~/.myapp.tcl”中可定义若干过程(porc) ,每个过程可在以后被调用,相当 一个新的 Tcl 命令。在“~/.myapp.tcl”定义了两个过程 prn 和 setenv。 过程 prn,是对命令 puts 扩展。它的用法为: prn str str str … prn 将把该命令所跟个数不限参数显示于屏幕上。如 prn Welcom you to use my TCL: $argv0 过程 setenv 是仿 csh 设计的一个过程,用于设置或显示环境变量。Tcl 继承 UNIX 的全部环 境变量,并用一维数组 env 表示,环境变量的名作为数组下标,该下标数组元素的值就是相应环 境变量的值。setenv 的用法是: setenv [key [value]] 它可跟 0~2 个参数。参数个数为 2,为设置一个新的环境变量,第一个参数是环境变量的 名,第二个参数是该环境变量的值;参数个数为 1,用于显示与此参数相匹配的所有环境变量; 参数个数为 0,为显示所有环境变量。
2.4.2. 在 C 中对 Tcl 中全局变量的读写
random 命令仍由名为 tclRandom 的 C 函数来实现,由于设计的功能的要求,需要按读写 Tcl 中的全局变量 range。在此函数中从 Tcl 中取变量 range 的值(字符串)由函数 TclGetVar 实 现,再用函数 Tcl_GetInt 将其转换为整数(int range) 。有关程序段为: int range; Tcl_GetInt(interp, Tcl_GetVar(interp, "range", TCL_GLOBAL_ONLY), &range); 当新的随机数 rand 产生之后,一方面将其值写至 interp->result(显示于屏幕) ,接着用函数
2.3. 用户自建 Tcl 命令( tcl2)
Tcl 允许用户用 C 语言创建 Tcl 命令。在 tcl2 中支持的命令 random 就是用户自建的命令。
2.3.1. 自建命令的设计
自建命令由命令名和根据功能需求若干个参数组成。如自建命令 random 设计为: random [limit] 这是一个取随机数的命令,它要求 0~1 个参数。如无参数,则产生一个随机数;如有一个 参数,此参数必须是整数,产生一个在此参数范围内( -|limit| ~ |limit| )的随机数。如给的参数不 是整数或参数个数多于 1 个,则报错。 用此命令产生一个 200 以内的随机数,有两种等价的方法: % random 200 或 % expr [random] % 200 此命令 expr 对其所跟的一“表达式”进行计算,输出结果;此表达式中第 1 项方括号表示 其内中的一条 TCL 命令的执行结果(一个未给定范围的随机数) 。
2.2. Tcl 的用户初始化( tcl1)
2.2.1. 用户初始化函数替换系统初始化函数
在 tcl0.c 中函数 Tcl_Init 是 Tcl 的系统初始化函数,Tcl 的所有功能都在这ห้องสมุดไป่ตู้函数中被规定。 现在用另一个初始化函数 Tcl_AppInit 替换 Tcl_Init,如 /* file: tcl1.c */ int main(int argc, char *argv[]) { Tcl_Main(argc, argv, Tcl_AppInit); exit(0); } 用户初始化函数 Tcl_AppInit 与系统初始化函数 Tcl_Init 类型相同,故具有可替换性。
2.4. C 中读写 Tcl 中变量, tcl3
2.4.1. 递减随机数命令 random 的设计
形式上递减随机数命令 random 仍保持在 tcl2 中定义的随机数命令一样,如 random [limit] 但此 random 较先前 tcl2 中定义的同名命令区别在于,此 random 同 Tcl 的一个全局变量 range 相关。每次执行此命令产生的随机数将自动赋值给该全局变量 range。当命令的参数个数 为 0 时,则产生的随机数较前次产生的随机数要小,除非 range 的值为 0。当命令参数为 1 时, 同先前的 ramdom 一样,产生一个在该参数范围内的随机数。
Tcl-Tk 进阶练习 TclSteps
申 明 1. 综述
本进阶练习包含 9 个单元: tcl0:由 C 程序建立最基本的 Tcl 可执行程序 tcl0。 tcl1:建立的 tcl1 具有自动执行一个 Tcl 脚本,进行初始化。 tcl2:建立的 tcl2,允许用户用 C 语言创建 Tcl 命令。 tcl3:C 程序中读写 Tcl 中全局变量。 tcl4:Tcl 中的全局变量和 C 程序中的变量连接,实现互通,同步改变。 tk0:由 C 程序建立最基本的 Tcl-Tk 可执行程序 tk0。 tk1:建立的 tk1,作为一个 Tcl-Tk 的练习平台。 tk2:建立的 tk2,用按扭调用用户命令的一个实例。 tk3:建立的 tk3,完全的 Tcl-Tk 人机交互界面的一个实例。 所有文件收于在目录~/TclSteps 下。按上述单元分立 9 个子目录。本目录中有一个 Makefile,用 于总控诸子目录的 Make,在本目录中还有.MakeTcl 和.MakeTk 两个文件,分别为下层 tcl#和 tk#两类 子目录的通用 Makefile。
2. Tcl
2.1. 基本 Tcl( tcl0)
2.1.1. tcl0 的生成
用如下 C 语言程序: /* file tcl0.c */ # include <tcl.h> int main(int argc, char *argv[]) { Tcl_Main(argc, argv, Tcl_Init); exit(0); } 经用如下命令编译: gcc -o tcl0 main.c -I/usr/local/include /usr/local/lib/libtcl.a -lsocket 便可生成一个标准的 Tcl 可执行程序 tcl0。 关键之点: 一是源程序 tcl0.c 中包含了头文件 tcl.h; 二是在编译连接时用了 Tcl 标准库 libtcl.a 和另一个标准库 libsocket.a(后者是前者所要求的) 。本程序中只调用了两个库函数 Tcl_Main 和 Tcl_Init。
TCL_TK 进阶练习 3
argv[1]非空。 根据输入,tclRandom 调用 C 库的标准函数产生所要求的随机数,再将它(一个整数)转换 为字符串,写至 interp->result。 此函数是整数型,函数只可返回 TCL_OK(成功)或 TCL_ERROR(失败) 。
2.3.4. 递降随机数的生成, Tcl 过程 Rnadom
2.2.2. 用户初始化之一:用 Tcl_EvalFile 函数读 Tcl 脚本
用户初始化函由用户自建,除必须首先调用系统初始化函数 Tcl_Init,用户具有“无限”的 扩展空间。在 tcl1.c 中,采用了函数 Tcl_EvalFile 读入 Tcl 脚本“~/.myapp.tcl” ,如 char *tcl_RcFileName = " ~/.myapp.tcl"; int Tcl_AppInit(Tcl_Interp *interp) { if (Tcl_Init(interp) == TCL_ERROR) { return TCL_ERROR; } Tcl_EvalFile(interp, tcl_RcFileName); return TCL_OK; } 在 C 中用 Tcl_EvalFile 函数读一个 Tcl 脚本,就相当在交换运行过程中用 source 命令读 Tcl
程序 tcl2 用了本目录下的 myapp.tcl 作为初始化文件,此文件开始部分如下: source $env(HOME)/.myapp.tcl proc Random {} { global range; if {$range <= 0} { set range 5000 } while { $range > 0} { prn $range: [set range [random $range]] } } 第一行中$env(HOME)代表环境变量 HOME 的值,所以本行是读文件” ~/.myapp.tcl” (其中 定义了 proc prn) 。 第二行开始,定义了又一个过程 Random。此过程无需参数。它核心部分是一个 while 循环, 此循环中仅一句: prn $range: [set range [random $range]] 这一句显示两个随机数,冒号左的$range 是 range 原先值;冒号右的两重方括号代表 range 的新值,内层方括号用 random 命令以 range 原先值为上界产生一随机数,接着由外层方括号用 set 命令把刚产生的随机数重新赋值给 range。此循环执行到变量 range 的值降为 0 为止。 过程 Random 要求全局变量 range 的存在,在第一次调用 Random 之前,必先用 set 命令 建立变量 range,如 set range “ ” 进入 Random 后,若检查出 range 的值小于或等于 0,则重置 range 为 5000。
2.3.3. 自建命令的函数的定义
用 C 语言定义的自建命令必须用统一的函数类型,如 int tclRandom(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); 需要说明的是: 此函数的第 3、4 个参数用作为函数的输入,字符串数组 argv,为 tcl2 运行中调用此命令时 的“命令行参数” ,它包含命令名和命令参数;argc 是命令行参数的个数,此例中它不得超过 2; argv[0] 为命令名,在此例中就是” random” ;argv[1] 、argv[2]…为命令的参数,在此例中最多只许