gpt4 book ai didi

vbscript - 读取大文件时 vbscript 中的系统内存不足问题

转载 作者:行者123 更新时间:2023-12-02 03:12:43 25 4
gpt4 key购买 nike

我正在尝试在 vbscript 中进行一些文本替换。问题是该文件有 150MB 大。下面是仅删除标题行并去除空行的函数。

正如我所怀疑的那样,它在 cleanHeaderRow 子中的 strContents = objTS.ReadAll 行给我一个错误“内存不足”。目前我不确定这个任务是否可以在 VBScript 中完成。但在我开始探索其他语言之前,我们非常欢迎任何类型的建议。

Sub cleanHeaderRow(browse)
MsgBox browse
Const FOR_READING = 1
Const FOR_WRITING = 2
'strFileName = "C:\scripts\test.txt"
strFileName = browse
iNumberOfLinesToDelete = 1

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
End Sub

Sub DeleteBlankRows(browse)
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(browse, ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.Readline
strLine = Trim(strLine)
If Len(strLine) > 0 Then
strNewContents = strNewContents & strLine & vbCrLf
End If
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile(browse, ForWriting)
objFile.Write strNewContents
objFile.Close
End Sub

最佳答案

您的两个过程都将整个文件读入内存,尽管它们是以不同的方式进行的。处理大文件的正确方法是打开文件,逐行处理,在读取输入时将输出写入临时文件,然后用临时文件替换原始文件。

例子:

filename = "..."

Set fso = CreateObject("Scripting.FileSystemObject")

Set inFile = fso.OpenTextFile(filename)
Set outFile = fso.OpenTextFile(filename & ".tmp", 2, True)
Do Until inFile.AtEndOfStream
If inFile.Line = 1 Then
inFile.SkipLine 'skip first line
Else
line = inFile.ReadLine
If line <> "" Then outFile.WriteLine line 'write non-empty lines to output
End If
Loop
inFile.Close
outFile.Close

fso.DeleteFile filename, True
fso.MoveFile filename & ".tmp", filename

这样一来,在任何给定时间,您的内存中都只有一行。不过,您可以用内存使用换取磁盘使用,因为您为输出创建了第二个文件。

关于vbscript - 读取大文件时 vbscript 中的系统内存不足问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39002907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com