51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4758|回复: 10
打印 上一主题 下一主题

[Robot] 请问哪里有介绍Robot中的File Input/Output和File Control的文章?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2004-9-17 15:34:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问哪里有介绍Robot中的File Input/Output和File Control的文章?
如果哪位曾经研究过这个方面,能不能谈谈你的经验?
我是新手,刚刚接触,什么都不懂,大家帮帮我啊!
先谢谢了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

2#
发表于 2004-9-18 10:43:26 | 只看该作者
你说的File Input/Output和File Control是否就是文件操作

这里先简单讲一下:
我们在进行系统自动化功能测试的时候,需要Robot从外部文本文件中读入到变量中,类似于实现数据池(datapool)的功能,这时可以通过对文件操作的几个语句来实现,其中 Open 语句能够对文件输入/输出,LOF函数返回一个 Long型值,表示用 Open 语句打开的文件的大小,该大小以字节为单位。Input函数从文件中读入数据,而Print函数则把数据写到文件中。下边是个代码例子
 Sub Main
       Dim Result as Integer
       Dim filename as String
       Dim VarValue as Strng 
          
      filename="c:\myext.txt"
  Open filename For Input As #1
    VarValue = Input$(Lof(1),#1)
  Close #1
   End Sub

那么如何把变量写回文本文件呢?下边是个例子程序:

Sub Main
       Dim Result as Integer
       Dim filename as String
       Dim VarValue as Strng 

        VarValue = “这是一个测试”

   filename="c:\myext.txt"
   on error resume next
   open "c:\file.txt" for output as #1
   print #1,varValue
   close #1

end sub
  

[ Last edited by pcl2004_27 on 2004-9-18 at 11:47 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2004-9-18 11:09:48 | 只看该作者

Rational Robot中文件操作(原创)

Rational Robot中提供了一个文件操作命令,语法如下:
Open filename$ [For mode] [Access access] [lock] As [#] filenumber% [Len = reclen]
这里我们把它的语法分为两部分,因为这个文件操作命令有两种文件操作模式,一种是顺序文件,一种是随机文件。

下边是对顺序文件操作的语法:
Open filename$ [  For [Input |Output |Append] As [#]filenumber [Len = buffersize]
参数说明:
说明:

  (1)参数filename$表示要打开的文件名,文件名可以包含有驱动器和目录

  (2)Input Output 和Append用于设置顺序文件的打开方式。其中,Input表示从打开的文件中读取数据。以这种方式打开文件时,文件必须存在,否则会产生错误。Output表示向打开的文件中写入数据。以这种方式打开文件时,文件中原有的数据将被覆盖,新的数据将从文件开始写入。如果文件不存在,则创建一个新文件。Append表示向打开的文件中添加数据。以这种方式打开时,文件中原有的数据将被保留,新的数据将从文件为开始添加。如果文件不存在,则创建一个新文件。

  (3)As[#]filenumber 子句用于为打开的文件指定文件号.对文件进行读写操作时,要用文件号表示该文件.文件号是介于1~511之间的整数,既可以是数字,又可以是变量.也可以省略不用.

  (4)当在文件与程序之间拷贝数据时,Len=buffersize子句指定缓冲区的字符数.

例子:
Open “c:\test.dat" For Output As 1
Open “c:\test.dat" For Output As 1
  这两句代码在c盘所在目录下创建了一个名为test.dat的文本文件,分配文件号为1.
Open “c:\test.dat"  For Input As [#]filenumber  这条语句是从文本文件中读取数据.
Open App.Path + "\test.dat" For Append As [#]filenumber   这条语句则是向文本文件中添加数据

[ Last edited by pcl2004_27 on 2004-9-18 at 11:48 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2004-9-18 11:25:31 | 只看该作者
随机文件的操作:
  操作随机文件之前,首先必须定义用于保存数据项的记录类型.该记录是用户自定义数据类型,他们是随机文件中存储数据的基本结构.例如:

Type Student
 No As Integer
 Name As String * 20
 age As Integer
End Type

Dim Stud As Student ‘定义一个可以存放学生材料的变量
  随机文件中,所有的数据都将保存到若干个结构为Student类型的记录中, 而从随机文件中读出的数据则可以存放到变量Stud中.之后我们就可以打开并读写文件了.

随机文件的操作语法格式:
Open filename For Random as [#]filenumber Len = Reclength
  说明:
  (1)参数filename 和filenumber 分别表示文件名或文件号.
  (2)关键字Random 表示打开的是随机文件
  (3)Len子句用于设置记录长度,长度由参数Reclength指定.Reclength的值必须大于0,而且必须与定义的记录结构的长度一致.计算记录长度的方法是将记录结构中每个元素的长度相加.例如前面声明的Student的长度应该是2+20+2=24字节.
打开一个记录类型为Student 的随机文件的方法是:
Open "c:\Student.txt " For Random As #1 Len = 25

这里还有一种文件操作方式二进制文件,下边是他的语法格式:
Open pathname For Binary As [#]filenumber
  说明:
  (1) 参数filename 和filenumber 分别表示文件名或文件号.
  (2)关键字Binary 表示打开的是二进制文件
  (3)对于二进制文件,不能指定字节长度.每个打开的二进制文件都有一个自己的指针,文件指针是一个数字值,指向下一次读写操作的文件中的位置.二进制文件中的每个”位置”对应一个数据字节,因此,有n个字节的文件,就有1到n个位置.

  我们可以用Seek()函数返回当前的文件指针位置(即下一个要读写的字节 );用Loc()函数返回上一次读写的字节位置,除非用Seek语句移动了指针,Loc()返回值总比Seek()的小1.我们来看下面的例子:
Open “路径:\student.txt” for Binary as #1    该语句用二进制的方式打开了student.txt文件.
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2004-9-18 11:39:32 | 只看该作者
下边我们继续介绍一下不同文件类型的操作:

一)读文件
  1、顺序文件
  顺序文件的读取有三种方式:
  (1)Line Input # 语句
  该语句从打开的顺序文件中读取一行数据。这里的一行指的是从当前指针位置开始到回车符或回车换行符之间的所有数据。Line Input # 语句的语法格式如下:
       Line Input # 文件号,变量号
  说明:“文件号”是打开文件时所用的文件号;“变量号”使用来存放读出数据的一个或多个变量,如果有多个变量,中间用空格分割开。Input# 语句为参数列表中的每一个变量读取文件的一个域,并将读出的域存入变量中。该语句只能顺序的从第一个域开始,直到读取想要的域。
  请看下面代码:

   Dim strLine As String
   Dim VarValue as String
   
    Open "c:\test.txt" For Input As #1
    Do Until EOF(1)
     Line Input #1, strLine
    VarValue = VarValue  + strLine
Loop

Close #1

  此段代码逐行读取一个文件到一个变量字符串中。

  (2)Input函数

  此函数可以从顺序文件中一次读取指定长度的字符串。具体地说,就是从文件的当前位置开始,读取指定个数的字符,然后将他们返回。Input函数可以读取包括换行符,回车符,空格符等在内的各种字符。下面是它的语法格式:

  变量 = Input(串长度,文件号)

  例如,要从一个打开文件中读取12个字符并复制到变量file中,我们可以这样写:

file = Input(12,filenum)

  如果要将整个文件复制到变量,请使用InputB函数将字节从文件复制到变量。由于InputB函数返回一个ASCII字符串,因此,必须用StrCopy函数将ASCII字符串转换为Unicode字符串。代码如下:

file = StrCopy (Input (LOF(filenanum),filenum),vbUnicode)

  (3)Input # 语句
  Input #语句可以从文件中同时向多个变量内读入数据,而且读入的数据可以是不同类型的。 
  下面使它的语法格式:

Input # 文件号,变量列表

  例如,我们要在文件student.txt中写入数据,下面是代码:

Open "student.txt" For Output As #filenum

Write #filenum, "张三", "初一年级", 14
Write #filenum, "李四", "职业高中", 18

Dim name As String, nianji As String, age As Integer
Dim name1 As String, nianji1 As String, age1 As Integer
Open "student.txt" For Input As #filenum
Input #filenum, name, nianji, age
Input #filenum, name1, nianji1, age1
Close #filenum

  执行结果:

name=”张三” ,nianji = “初一年级” ,age =14

name=”李四” ,nianji = “职业高中” ,age =18  

  2、随机文件

  读取随机文件是可以使用Get # 语句,数据从文件的一个指定记录中读出后,存入一个用户自定义的变量中.

  语法格式: Get # FileNum ,[RecNum],UserType

  说明:

  (1)FileNum 是要打开的文件号;RecNum是要读取的记录号,若省略,则读取下一个记录

  (2)UserType 是一个用来存放读出数据的用户自定义的数据类型变量.

  下面是一个例子:

Get # 1,5,Student  

  该语句读取文件号为1的文件中的第5条记录.

  3、二进制文件

  读写二进制文件的方法和读写随机文件的方法基本相同,下面是相关的语句格式及其说明:

  格式: Get [#]fileNumber ,[Pos], Var

  功能: 用二进制方式,从文件的中指定的位置开始读取,所给变量长度的数据

  说明:

  (1)FileNumber是以二进制方式打开的文件号.

  (2)Pos用来指定读写操作发生时的字节位置,若省略,则使用当前文件指针位置.

  (3)Var是用来存放读出的数据的变量.该语句会自动根据var变量包含的字节长度读取适当的文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数.对于文件长度的判断我们可以使用Lof()函数,Eof()函数检查文件的结尾位置.

  下面的代码复制studert.txt文件到student1.txt文件中

Dim ar As String * 1, i As Integer
Open "c:\student.txt" For Binary As #1
Open "c:\student2.txt" For Binary As #2
For i = 1 To LOF(1)
 Get #1, , ar
 Put #2, , ar
Next i

Close #1, #2
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2004-9-18 11:42:31 | 只看该作者
二)写文件
  1、 顺序文件
  写顺序文件我们可以用Write # 和Print #语句向一个已经打开的文件中写入数据.
  下面是他们的格式和说明:

  Print # 的语法格式:

  Print # 文件号,变量列表

  例如,将文本框中的文本写到文件中,代码如下:

Open "file.txt" For Output As #filenum

Input #filenum, text1.text

  Write # 语句的语法格式:

Write # 文件号,变量列表

  说明:用Write # 语句写入的信息便于以后用Input #语句来读取数据,因为Write #语句自动将写入到文件中的信息用逗号分开,并为字符串数据加上双引号.例如:

Open "student.txt" For Output As #filenum

Write #filenum, "张三", "初一年级", 14
Write #filenum, "李四", "职业高中", 18

  2、 随机文件

  向随机文件中写入数据,使用Put #语句.语法格式如下:

Put [#] FileNum ,[RecNum],UserType

  说明:

  (1) FileNum 是要打开的文件号;RecNum是要写入的记录号,若省略,则再上一次用Get 和Put语句所读写过的记录的后一条记录中写入,如果没有执行过Get 和Put语句,就从第一条记录开始

  (2)UserType 是包含要写入数据的用户自定义的数据类型变量.例如:我们向前面的student.txt文件中的第5个记录写入数据,可用这些语句:

stud.No = 0301
stud.Name = “王武”
stud.Age =20
Put #1 ,5,stud

  如果要插入的数据不只一两条的话,首先要确定文件和每条记录的长度,这样就可以计算出文件中究竟有多少条记录.我们可以用Lof()函数返回文件的长度,Len()函数返回每个记录的长度,计算文件中的记录个数可以用文件的长度除以给个记录的长度.示例如下:

Nextrec= (Lof(1)\Len(UserType))+1

Put #1,Nextrec,UserType

  3、二进制文件

  下面是以二进制方式写入文件的语句格式及其说明:

  格式:

Put [#]fileNumber ,[Pos], Var

  功能: 用二进制方式,从文件的中指定的位置开始写入,所给变量长度的数据

  说明:

  (1)FileNumber是以二进制方式打开的文件号.

  (2)Pos用来指定写操作发生时的字节位置,若省略,则使用当前文件指针位置.

  (3)Var是用来存放写入的数据的变量.该语句会自动根据var变量包含的字节长度写入文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数.

  使用方法可参考二进制文件的读操作.
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2004-9-18 11:43:26 | 只看该作者
以上是Rational Robot中的文件操作的总结,有疏漏之处,欢迎大家交流!
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2004-9-20 16:11:59 | 只看该作者
是啊,我说的就是文件操作!谢谢版主提供帮助!谢谢!我研究一下。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2004-9-21 11:46:52 | 只看该作者

两点疑问

版主,我有两点疑问,你看看我说的对不对。
1. “下边是对顺序文件操作的语法:
Open filename$ [  For [Input |Output |Append] As [#]filenumber [Len = buffersize] ” ,这里,我认为应该去掉[Len = buffersize]。因为[Len = buffersize] 是用于模式为Binary的,而对于Input |Output |Append模式来说,是没有这个从句的。也就是说[Len = ....]这个从句只能用于Radom和Binary模式,Binary模式时Len = buffersize,Radom模式时Len=reclength。
2. “文件号是介于1~511之间的整数”,这里,我认为文件号是介于1~255的整数。因为我用文件号256时运形时就出错,而用255不会出错。

不知道我提供的信息对不对,请版主解答。谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2004-9-21 11:57:32 | 只看该作者
我整理的时候比较匆忙,你说的第二个问题文件号256以内的区间是正确的!

对于后边的 buffersize是可选项,你可以设置每次写入变量的长度!
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2004-10-9 09:52:57 | 只看该作者
Robot 在对文件操作时,会把写入的字符串自说自话的加上双引号,请问该如何解决?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-5-21 21:10 , Processed in 0.086161 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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