从那开始,我对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"
感谢您的帮助!为了给我一个正确的方向!
答案 0 :(得分:1)
在循环中,您读取文件的每一行,然后将其写入变量strLine
在那之后,你替换“SMTL”/“VGML”,但在那之后,你对strLine
的内容一无所知 - 你只需用下一个循环中源文件的下一行替换它。 / p>
只有在最后,您才会将strLine
写入文件一次 - 但在那一刻,strLine
仅包含源文件中的最后一行。
解决方案:你可以写入目标文件里面 Do...Loop
(但我不熟悉VBScript,所以我不知道是否/如何做到这一点)或者您可以使用第二个字符串变量,在循环中附加strLine
但在替换后...就像这样:
strFinal = strFinal & strLine
最后,您将strFinal
写入文件,而不是strLine
。