你笑的时候全世界陪你一起笑,你哭的时候只有你一个人哭

使用Robot从txt文件中读取不同行的内容并显示(续二)

上一篇 / 下一篇  2006-12-14 22:04:09 / 个人分类:Rational Robot 技术

重新整理代码,将取得文件内容的子程序ReturnCell新增一个数组参数,其他脚本调用这个子程序时可以分别指定保存在不同的数组变量中,如我需要从两个文件中分别取得清单和定额,则可以Call两次ReturnCell,并指定一个保存在CellQD(),一个保存在CellDE()里。依旧是贴出代码。

主脚本:main(其中一部分涉及到录制程序时生成的语言,与本文介绍的方法无关,但我没有删除掉,保持“原汁原味”)

=================================================================================

'$include: "FunctionLib.sbl"

Sub Main
    'Initially Recorded: 2006-12-4  9:01:39
    'scrīpt Name: FenBuFenXiang
    Dim Result As Integer
    Dim LocationQD,LocationDE as string
    Dim RowNumQD,RowNumDE as integer
    Dim x as integer
    Dim T
   
'    给出清单和定额的路径=============================================
    LocationQD = "D:\test1.txt"
    LocationDE = "D:\test2.txt"

'    得到清单和定额的行数=============================================
    RowNumQD = ReturnRowNum(LocationQD)
    RowNumDE = ReturnRowNum(LocationDE)
   
'    将清单和定额赋给一个全局的数组,数组在FunctionLib.sbl文件中定义=============
    call ReturnCell(LocationQD,RowNumQD,CellQD())
    call ReturnCell(LocationDE,RowNumDE,CellED())
   
    for x = 1 to 100   '  做一个循环,插入清单和定额 ===================================
   
    Window SetContext, "Caption= [预算书1]", ""
           
    Window SetContext, "Caption=预算书1;ChildWindow", ""
    DataGrid Click, "ObjectIndex=2", "Coords=83,50"     '鼠标左键点击左上角的那个单元格
    DataGrid Right_Click, "ObjectIndex=2", "Coords=87,48"    '点击鼠标右键
   
    Window SetContext, "Class=TTBXPopupWindow", "Activate=0"
    Window Click, "", "Coords=23,57"                          '选择“插入”
   
    Window SetContext, "Caption= [预算书1]", ""
   
    Window SetContext, "Caption=预算书1;ChildWindow", ""
   
    InputKeys CellQD(x)     '  调用保存清单的数组,并输入
   
    InputKeys "{ENTER}"
    InputKeys "10"          '  输入清单工程量
   
    InputKeys "{ENTER}"   
    InputKeys CellDE(x)     '  调用保存定额的数组,并输入
   
    InputKeys "{ENTER}"   
    InputKeys "5"           '  输入定额工程量
   
    T = Val(Right(Str(Timer*100),1))    '取得一个随机的一位数
'   
    If (T mod 2)=0 then              '判断,如果这个一位数是偶数则执行下面的删除清单操作
   
    Callscrīpt "DeleteQingD"
   
    End If
   
    next x           '  循环结束==========================================================
   
   
End Sub

=================================================================================

 

FunctionLib.sbl库文件中的内容修改如下:

=================================================================================

Option Base 1
Global CellQD() as string
Global CellDE() as string        '全局变量,动态数组

Function ReturnRowNum(Dircetory as string) as integer    '返回指定文件的行数
   Dim testscore as String
   Dim x,i,y as integer
  
   if IsMissing(Dircetory) then
    msgbox "no Dircetory"
   End if
  
   Open Dircetory for Input as #1
   x=0
   i=0
   Do Until x=Lof(1)
      Line Input #1, testscore
      x=x+1
      i=i+1
      y=Seek(1)
      If y>Lof(1) then
         x=Lof(1)
      Else
         Seek 1,y
      End If
   Loop
   Close #1
   ReturnRowNum = i
End Function  

Sub ReturnCell(Dircetory as string,RowNum as integer,Cell() as string) 
'子程序,请本脚本开头的地方设置Global级别的动态数组,并设置Option Base 1,因为我想把行的数和数组元素对应起来
   Dim testscore as String
   Dim x,i,y as integer
   if IsMissing(Dircetory) then
    msgbox "no Dircetory"
   End if
   if IsMissing(RowNum) then
    RowNum = 0
   End if
      
   Redim cell(RowNum)
   Open Dircetory for Input as #1
   x=1
   Do Until x=Lof(1)
      Line Input #1, testscore
      Cell(x) = testscore
      x=x+1
      y=Seek(1)
      If y>Lof(1) then
         x=Lof(1)
      Else
         Seek 1,y
      End If 
   Loop
 
   Close #1
 
End Sub

=================================================================================

这里我将动态数组的起始下标值设置为1,为的是和行数能一一对应。我觉得全局动态数组在sbl文件中声明比在调用脚本中声明更好,所以就将CellQD()和CellDE()放到这里了。

PS:以上程序均可正常跑通,感觉健壮和通用性更好一些


TAG:

 

评分:0

我来说两句

Open Toolbar