【问题标题】:VBS Delete Row from FileVBS 从文件中删除行
【发布时间】:2013-11-23 00:36:24
【问题描述】:

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

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

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"

【问题讨论】:

  • 您的标题是“VBS”,似乎是指 VBScript。您的标签上写着“vb.net”。您的代码看起来像 VB6。这三个是哪一个?它们不是一回事。
  • 作为 VBA 对我来说工作正常。可能是 VBS 不支持某些内容。请注意,您正在写入源文件并在此过程中将其销毁。如果出现问题,数据就会消失。最好写入一个新文件,然后删除旧文件(或重命名为可能在文件名中带有日期的 BAK 名称)并将新文件重命名到位。
  • 我正在使用 VBS 我修复了标签。我尝试写入一个新文件,但没有奏效。它非常适合小文件,但我正在处理的文件非常大,并且由于某种原因它无法处理它。

标签: vbscript


【解决方案1】:

不要在 .ReadAll()、Split() 和 Array 循环上浪费内存和循环。做吧:

...
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 

(未测试)

【讨论】:

  • 我尝试了代码,但收到一条错误消息。它说错误:输入超过文件结尾。代码:800A003E。你知道我为什么会收到这个错误吗?我所做的只是在 Set tsIn = objFS.OpenTextFile(strFileName, FOR_READING) 之前添加 Const FOR_READING = 1 Const FOR_WRITING = 2 strFileName = "\\File\test Scp\ZRAS.txt"
  • 没关系,我能够解决该问题,但我收到另一个错误消息..invaild 过程调用或参数代码:800A0005。我将在下面发布代码
  • @user2974995 你有没有让完整的脚本工作?如果可以,请发帖好吗?
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
相关资源
最近更新 更多