我该怎么清空一个数据流?
我想替换一个文本文件的内容。
Set stream = CreateObject("ADODB.Stream")
stream.Mode = 3
stream.Type = 2
stream.Charset = "UTF-8"
stream.Open
stream.LoadFromFile p
stream.Position = 0
strContent = stream.ReadText
re.IgnoreCase = False
re.Global = False
re.Pattern = ",""beautifybuttonstate"":""[^""]+"""
strContent = re.Replace(strContent, ",""beautifybuttonstate"":""USER_HIDE""")
stream.Position = 0
stream.WriteText strContent
stream.SaveToFile p, 2
stream.Close
p 是一个包含文本文件完整路径的字符串。
re 是一个 vbscript.regexp 对象。
问题在于如果替换后的内容比原始内容短,得到的文件大小将与原始文件相同,最后的若干字符仍未被替换,保持原样。
先行致谢。
注:我正在处理的文件是JSON。如果你知道使用VBScript更好地替换JSON中某个值的方法,请告诉我具体做法。
解决方案
在运行下面任一脚本之前,请确保你的JSON文件以不带BOM的 UTF-8保存。
你可以使用FSO,并将文件按ANSI处理。UTF-8字符将被保留。
UpdateJSON.vbs
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set re = CreateObject("VBScript.RegExp")
ForReading = 1
ForWriting = 2
p = "C:\Test\Test.json"
Set oFile = oFSO.OpenTextFile(p, ForReading, False)
Data = oFile.ReadAll
oFile.Close
re.IgnoreCase = False
re.Global = False
re.Pattern = ",""beautifybuttonstate"":""[^""]+"""
Data = re.Replace(Data, ",""donatebuttonstate"":""USER_HIDE""")
Set oFile = oFSO.OpenTextFile(p, ForWriting, False)
oFile.Write Data
oFile.Close
你也可以在HTA中直接使用JScript来操作JSON文件:
UpdateJSON.hta
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=11" />
<script language="JScript">
window.onload = function ()
{
window.resizeTo(100, 100);
var ForReading = 1;
var ForWriting = 2;
var p = "C:\\Test\\Test.json";
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oFile = oFSO.OpenTextFile(p, ForReading, false);
var data = oFile.ReadAll();
oFile.Close();
var oJSON = JSON.parse(data);
if (oJSON.hasOwnProperty("beautifybuttonstate"))
{
delete oJSON.beautifybuttonstate;
oJSON.donatebuttonstate = "USER_HIDE";
}
oFile = oFSO.OpenTextFile(p, ForWriting, false);
oFile.Write(JSON.stringify(oJSON));
oFile.Close();
window.close();
}
</script>
</head>
</html>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。