51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

12
返回列表 发新帖
楼主: ameg3

[讨论] re

[复制链接]

该用户从未签到

 楼主| 发表于 2009-12-9 17:49:09 | 显示全部楼层

re

问题31:TCL中的目录管理和文件操作


当前工作目录:

    TCL提供两个命令来管理当前工作目录:pwd和Cd。
    pwd和UNIX下的pwd命令完全一样, 没有参数,返回当前目录的完整路径。
    cd 命令也和UNIX命令也一样,使用一个参数,可以把工作目录改变为参数提供的目录。如果cd 没使用参数,UNIX下,会把工作目录变为启动TCL脚本的用户的工作目录,WINDOWS下会把工作目录变为windows操作系统的安装目录所在的盘的根目录(如:C:/)。值得注意的是,提供给cd的参数中路径中的应该用'/'而不是'\',如 cd  C:/TCL/lib,这是UNIX的风格。


文件操作:
    file命令

file copy ?-force?  ?--?  source  target
file copy ?-force?  ?--?  source  ?source ...?    targetDir   
这个命令把source中指明的文件或目录递归的拷贝到目的地址targetDir,只有当存在-force选项时,已经存在的文件才会被覆
盖。试图覆盖一个非空的目录或以一个文件覆盖一个目录或以一个目录覆盖一个文件都会导致错误。

file delete ?-force? ?--? pathname ?pathname ... ?
这个命令删除pathname指定的文件或目录,当指定了-force时,非空的目录也会被删除。即使没有指定-force,只读文件也
会被删除。删除一个不存在的文件不会引发错误。

file mkdir dir ?dir ...?
这个命令和UNIX的mkdir命令类似,创建dir中指明的目录。如果dir已经存在,这个命令不作任何事情,也不返回错误。不过如
果试图用一个目录覆盖已经存在的一个文件会导致错误。这个命令顺序处理各个参数,如果发生错误的话,马上退出。

file rename ?-force? ?--? source target
file rename ?-force? ?--? source ?source ...? targetDir
这个命令同时具有重命名和移动文件(夹)的功能。把source指定的文件或目录改名或移动到targetDir下。 只有当存在-force
选项时,已经存在的文件才会被覆盖。 试图覆盖一个非空的目录或以一个文件覆盖一个目录或以一个目录覆盖一个文件都会导
致错误。
问题32:如何用TCL脚本来实现将字符串(含中文)转换为ASCII串?


脚本范例:

proc ConvertStrToASCII {Str} {
    set StrLen [string length $Str];
    set ConvertedStr "";
    set TempFile [open "TempFile.data" w+]
    puts $TempFile $Str;
    close $TempFile;
    set TempFile [open "TempFile.data" r+];
    set StrLen [expr $StrLen+10];
    for {set i 0} {$i<$StrLen} {incr i 1} {
        set ASCIIOfCurChar [read $TempFile 1];
        if {$ASCIIOfCurChar==""} {
            break;
        }
        scan $ASCIIOfCurChar "%c" ASCIIOfCurChar
       lappend ConvertedStr $ASCIIOfCurChar;
    };
    close $TempFile;
    return $ConvertedStr;
}

[ 本帖最后由 ameg3 于 2009-12-9 17:50 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-12-9 17:52:18 | 显示全部楼层

re

问题33:TCL对网络和协议的支持


    TCL对TCP协议的支持是通过一组命令实现的。它建立TCP连接是使用socket命令,以建立服务器端或客户端socket(由于在TCL中把socket和文件基本等同,都看作信道(channel〕,并且使用相同的操作命令,所以下面介绍命令时使用信道,以求得介绍更具普遍性,不过在建立TCP连接时你可以把信道理解为一个socket)。然后利用fconfigure命令来设置或获取信道的各项参数,并利用puts、flush、gets、read、fcopy等命令对信道进行读写。另外还需要一个vwait命令,以进入TCL事件循环,利用TCL的事件驱动机制
问题34:面向对象的TCL——ITCL


    ITCL是INCR TCL的缩写,也称TCL++,是TCL的一个重要扩展,并和TCL完全兼容,ITCL支持面向对象的程序设计。 ITCL扩展TCL类似于C++扩展C,ITCL中借用了C++的很多概念,因此熟悉C++的人会觉得学习ITCL比较容易。
    面向对象的编程可以提高软件重用的程度和效率,改善程序结构。目前TCL已经被广泛用于我们的测试工作中,如何进一步提高我们编写脚本的效率和脚本的重用性成为一个突出的问题,ITCL正好可以部分的解决这个问题,这也是我们引入ITCL的原因。
    ITCL中,一个类实际上就是一个名字空间(namedpace),不过提供了一些额外的功能来生成和管理对象,而且类的定义也更严格。但是名字空间中的很多概念和类类似,比如限定名,完全限定名等。

[ 本帖最后由 ameg3 于 2009-12-9 17:53 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-12-9 17:53:50 | 显示全部楼层

re

问题35:通过vwait命令和after命令组合来触发事件


【功能】
直至变量写入时执行某事件

【语法】
vwait varName

【描述】

    该命令进入TCL事件循环之中执行事件,如果没有就绪事件将阻塞应用。它将继续执行事件,直至某些事件句柄设置了变量varName。一旦设置了varName,修改varName的事件句柄一完成,evwait命令将马上返回。varName必须是全局范围内有效(或者通过gobal命令调用varName,或者标明全namespace路径)。
    在一些情况下,当设置完varName后vwait命令并不立即返回。设置varName的事件句柄没有立即完成时就会发生这种情况。例如,如果事件句柄设置了varName,接着它自身调用了vwait命令以等待另外一个变量,这样很长时间该命令都有可能不返回。在这段时间内,级别最高的vwait命令处于阻塞态,等待事件句柄完成,因此它不能随意返回。

【样例】
proc temp1 {} {
global conn
        set conn 1
        puts "setting conn 1"
}

after 1000 temp1
after info
set conn 0
puts "test vwait command and setting conn 0"
puts "waiting for set conn again..."
vwait conn
after info
puts "conn == $conn"
puts "game over"

【输出】
after#0
test vwait command and setting conn 0
waiting for set conn again...
setting conn 1
conn == 1
game over

【解析】
[1] 该命令仅在仿真版本上可行,实际单板操作时不建议使用之;
[2] 注意在执行vwait前后after info的内容,在执行前是存在的,在执行完毕后自动删除id,这与语法描述是相符的
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-12-9 17:54:35 | 显示全部楼层

re

re
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-16 16:28 , Processed in 0.069109 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表