我擁有大小約爲6MB的文本文件。有一些行包含我想刪除的NULL(Chr(0))字符。 我有兩種方法來做到這一點:使用Asc()= 0,但這大約需要50s完成,另一種方法使用InStr(行,Chr(0))= 0(快約4秒),但結果刪除重要信息包含NULL字符的行。使用vbs從文本文件中刪除nul字符
文本文件作爲例子的第一行:
@@MMCIBN.000NULL7NULL076059NULL7653NULL1375686349NULL2528NULL780608NULL10700NULL\NULL_NC_ACT.DIR\CFG_RESET.INI
第一種方法(的作品,但很慢)
function normalise (textFile)
Set fso = CreateObject("Scripting.FileSystemObject")
writeTo = fso.BuildPath(tempFolder, saveTo & ("\Output.arc"))
Set objOutFile = fso.CreateTextFile(writeTo)
Set objFile = fso.OpenTextFile(textFile,1)
Do Until objFile.AtEndOfStream
strCharacters = objFile.Read(1)
If Asc(strCharacters) = 0 Then
objOutFile.Write ""
nul = true
Else
if nul = true then
objOutFile.Write(VbLf & strCharacters)
else
objOutFile.Write(strCharacters)
end if
nul = false
End If
Loop
objOutFile.close
end function
輸出看起來是這樣的:
@@MMCIBN.000
7
076059
7653
1375686349
2528
780608
10700
\
_NC_ACT.DIR\CFG_RESET.INI
方法二碼:
filename = WScript.Arguments(0)
Set fso = CreateObject("Scripting.FileSystemObject")
sDate = Year(Now()) & Right("0" & Month(now()), 2) & Right("00" & Day(Now()), 2)
file = fso.BuildPath(fso.GetFile(filename).ParentFolder.Path, saveTo & "Output " & sDate & ".arc")
Set objOutFile = fso.CreateTextFile(file)
Set f = fso.OpenTextFile(filename)
Do Until f.AtEndOfStream
line = f.ReadLine
If (InStr(line, Chr(0)) > 0) Then
line = Left(line, InStr(line, Chr(0)) - 1) & Right(line, InStr(line, Chr(0)) + 1)
end if
objOutFile.WriteLine line
Loop
f.Close
但隨後的輸出是:
@@MMCIBN.000\CFG_RESET.INI
是否有人可以指導我如何快速去除空值,而不會丟失信息。我曾嘗試使用第二種方法來掃描哪些行號需要更新,然後將其提供給第一種方法來嘗試加快速度,但老實說,我不知道哪裏可以開始做這件事! 在此先感謝...
您試過['Replace()'](http://msdn.microsoft.com/en-us/library/238kz954(v = vs.84).aspx )? – 2014-08-28 18:14:45
感謝您的回覆。是的,腳本沒有輸出,但具有較高的CPU和內存使用率,就是這樣。 – BertB 2014-08-28 18:39:40