VBS替换和写

时间:2012-07-22 16:33:36

标签: vbscript replace readline

从那开始,我对VBS不太好,但试着学习。 现在我在将替换写入文本文件时遇到了一些困难。

我想要做的是搜索文本“VGML”,当发现这个时检查同一行是否有“STML”如果是这样的话,这应该替换为“”而不是弄乱了文件。最后,如果在没有“STML”的情况下找到“VGML”,则应删除“VGML”。

到目前为止,当我使用echo时,我可以看到代码完成了我想要的操作,但是写入文件主要是为了获取一个空文件,代码删除了所有内容。

有人能把我放在正确的方向吗?

以下是代码:

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Script\RemoveSTML\testFiles\test.txt", ForReading)

strEMTY = "    "
strSTML = "STML"
strVGML = "VGML"

Do Until objFile.AtEndOfStream
   strLine = objFile.ReadLine
   If InStr(strLine,strVGML)>0 Then
      If Instr(strLine,strSTML)>0 Then
         strLine = Replace(strLine, strSTML, strEMTY)
         wscript.Echo strLine
      Else
         strLine = Replace(strLine, strVGML, strEMTY)
         wscript.Echo strLine
      End If
   End If                                             
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile("C:\Script\RemoveSTML\testFiles\test.txt", ForWriting)
objFile.Write strLine
objFile.Close
Wscript.Echo "done"

感谢您的帮助!为了给我一个正确的方向!

1 个答案:

答案 0 :(得分:1)

在循环中,您读取文件的每一行,然后将其写入变量strLine 在那之后,你替换“SMTL”/“VGML”,但在那之后,你对strLine的内容一无所知 - 你只需用下一个循环中源文件的下一行替换它。 / p>

只有在最后,您才会将strLine写入文件一次 - 但在那一刻,strLine仅包含源文件中的最后一行。

解决方案:你可以写入目标文件里面 Do...Loop(但我不熟悉VBScript,所以我不知道是否/如何做到这一点)或者您可以使用第二个字符串变量,在循环中附加strLine但在替换后...就像这样:

strFinal = strFinal & strLine

最后,您将strFinal写入文件,而不是strLine