2013-11-21 297 views
1

我目前无法从文本文件中删除前两行。我在下面使用下面的代码。它在一个小文本文件上工作完美,但它不适用于非常大的文本文件。我一直试图让这个工作的文件大小超过130,000kb。VBS从文件中删除行

我没有收到任何错误消息,它只是删除文件中的所有内容,使其完全空白。无论如何,我可以得到这个工作?

Const FOR_READING = 1 
Const FOR_WRITING = 2 
strFileName = "\\File\test Scp\ZRAS.txt" 
iNumberOfLinesToDelete = 2 

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING) 
strContents = objTS.ReadAll 
objTS.Close 

arrLines = Split(strContents, vbNewLine) 
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING) 

For i=0 To UBound(arrLines) 
If i > (iNumberOfLinesToDelete - 1) Then 
    objTS.WriteLine arrLines(i) 
End If 
Next 


MSGBOX "Done" 
+3

你的标题说 “VBS”,这似乎是指为VBScript。你的标签说“vb.net”。你的代码看起来像VB6。哪三个呢?他们不是一回事。 –

+0

适合我作为VBA使用。可能是VBS不支持的东西。请注意,您正在写入源文件并在此过程中销毁它。如果出现问题,数据就消失了。最好写入一个新文件,然后删除旧文件(或者重命名为BAK名称,可能带有文件名中的日期),然后重新命名新文件。 – rheitzman

+0

我正在使用VBS我修复了标签。我试图写入一个新文件,并没有奏效。它适用于小文件,但我正在处理的文件非常大,出于某种原因,它不会在它上面工作。 – user2974995

回答

2

不要在.ReadAll(),Split()和数组循环中浪费内存和循环。只要做到:

... 
Set tsIn = objFS.OpenTextFile(strFileName, FOR_READING) 
Set tsOut = objFS.OpenTextFile(strFileName, FOR_WRITING) 

tsIn.SkipLine ' could use a loop to skip first n lines 
tsIn.SkipLine 

Do Until tsIn.AtEndOfStream 
    tsOut.WriteLine tsIn.ReadLine() 
Loop 
tsIn.Close 
tsOut.Close 

(未测试)

+0

@AnsgarWiechers - 没错。将改变代码。 –

+0

我尝试了代码,并收到一条错误消息。它说错误:输入文件末尾。代码:800A003E。你有什么想法,为什么我会收到这个错误?我所做的只是在设置tsIn = objFS.OpenTextFile(strFileName,FOR_READING)之前添加Const FOR_READING = 1 Const FOR_WRITING = 2 strFileName =“\\ File \ test Scp \ ZRAS.txt” – user2974995

+0

Nevermind i'm was able to fix这个问题,但即时通讯获得另一个错误消息.. invaild过程调用或自由代码:800A0005。我会发布代码 – user2974995