51Testing软件测试论坛

标题: 如何更改文件 [打印本页]

作者: vaguely    时间: 2007-8-17 18:04
标题: 如何更改文件
请教大家如何在qtp中更改文件内容呢?

c:\abc.txt

原来是
####
orcal=true
####

####
#MySQL=true
#####

改为
####
#orcal=true
####

####
MySQL=true
#####

谢谢!
作者: zhuyuancan    时间: 2007-8-17 18:08
自己写脚本嘞
作者: gzj_06    时间: 2007-8-17 18:18
这个看来得要实现插入文本和删除文本的功能,期待高手的从天而降
作者: 风过无息    时间: 2007-8-17 20:19
读和写有点问题啊...郁闷死了,弄了2小时没有什么进展.
作者: vaguely    时间: 2007-8-17 20:49
谢谢斑竹帮忙sdlkfj6
作者: winfood    时间: 2007-8-17 21:05
原帖由 vaguely 于 2007-8-17 18:04 发表
请教大家如何在qtp中更改文件内容呢?

c:\abc.txt

原来是
####
orcal=true
####

####
#MySQL=true
#####

改为
####
#orcal=true
####

####
MySQL=true
#####

谢谢!


这两天正在试用VbsEdit,发现里面有好多代码范例。找了一段关于文本文件操作的代码改了改,不知道能不能满足要求。

  1. strFileName = "C:\test.txt"
  2. Set objFS = CreateObject("Scripting.FileSystemObject")
  3. '读出文件内容
  4. Set objTS = objFS.OpenTextFile(strFileName, 1)
  5. strContents = objTS.ReadAll
  6. objTS.Close

  7. '将文件内容转换为数组,逐行读出后根据需要进行修改并写会文件中
  8. arrLines  = Split(strContents, vbNewLine)
  9. Set objTS = objFS.OpenTextFile(strFileName, 2)
  10. For i = 0 To UBound(arrLines)
  11.     If InStr(1, arrLines(i), "orcal", 1) > 0 Then
  12.         arrLines(i) = "#orcal=true"
  13.     End If
  14.     If InStr(1, arrLines(i), "MySQL", 1) > 0 Then
  15.         arrLines(i) = "MySQL=true"
  16.     End If       
  17.     objTS.WriteLine arrLines(i)
  18. Next
复制代码

作者: vaguely    时间: 2007-8-18 00:30
谢谢,我会试试
作者: yabest    时间: 2007-8-18 01:44
标题: 回复 #1 vaguely 的帖子
这种问题,简单点的,就是把整个文件内容读入字符串里,修改字符串内容,然后再把整个字符串覆盖写入原文件!

当然这个文件不能太大,几百M的就不好用这种方法了!
只能同时建立一个临时文件,然后读原文件一行内容,处理一下,然后写入临时文件。
这样循环处理每一行,直到全部处理完。再用临时文件覆盖原文件!
作者: 风过无息    时间: 2007-8-18 16:15
用楼上的办法是可以的,不过感觉笨了,有没有别的办法呢?

方法如下:
  1. Function Replace_str(oldstr,newstr)
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set MyFilebak = fso.CreateTextFile("c:\testbak.txt", True)
  4. MyFilebak.close
  5. Set CreFile = fso.GetFile("c:\test.txt")
  6. CreFile.Copy ("c:\testbak.txt")
  7. Set MyFilebak=fso.OpenTextFile("c:\testbak.txt", 1, false)
  8. Set theFile = fso.OpenTextFile("c:\test.txt", 2, True)
  9. Do While MyFilebak.AtEndOfStream <> True
  10.       retstring = MyFilebak.ReadLine
  11.           If retstring=oldstr Then
  12.                   theFile.WriteLine newstr

  13.                   else
  14.                             theFile.WriteLine retstring
  15.           End If

  16.    Loop
  17.    MyFilebak.close
  18. Set DelFile = fso.GetFile("c:\testbak.txt")
  19. DelFile.Delete
  20.    theFile.Close
  21.    ReadEntireFile = retstring
  22. End Function

  23. Call Replace_str("#orcal=true","orcal=true")
  24. Call Replace_str("MySQL=true","#MySQL=true")
复制代码

作者: yabest    时间: 2007-8-18 21:05
原帖由 风过无息 于 2007-8-18 16:15 发表
用楼上的办法是可以的,不过感觉笨了,有没有别的办法呢?

方法如下:
Function Replace_str(oldstr,newstr)
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFilebak = fso.CreateTextFile("c: ...


晕,你这不就是我说的第二种方法嘛
作者: 风过无息    时间: 2007-8-18 22:39
不好意思,表诉不清楚,我的意思是你用的思路来实现了,但是希望有更好的方法.

昨天我实验的思路是每行读出来,遇到需要改的再写,不过没有实现呢.
作者: yabest    时间: 2007-8-19 00:33
部分改写文件内容的操作,不是很好处理的,还是另写到临时文件的比较简单!
作者: vaguely    时间: 2007-8-19 01:37
谢谢楼上各位的回答。我在试上面的方法。可是其实我要改的文件是.propertise的。
为什么qtp找不到 c:\test.preopertise文件呢?
对于c:\test.txt确可以找到。请大家再继续帮帮我吧。非常感谢!
作者: vaguely    时间: 2007-8-19 10:32
不好意思,我的问题是我自己写错了文件名造成的sdlkfj5 。现在文件可以被打开了。
作者: walker1020    时间: 2007-8-19 13:29
原帖由 vaguely 于 2007-8-19 10:32 发表
不好意思,我的问题是我自己写错了文件名造成的sdlkfj5 。现在文件可以被打开了。

测试一定要细心、细心、再细心!
作者: vaguely    时间: 2007-8-19 20:08
sdlkfj1  谢谢斑竹!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2