0

文字列を検索するために JScript で大きなテキスト ファイルを読み込もうとしていますが、オーバーフロー例外が発生します。次のコードを書きました。

var ForReading = 1;
var TriStateFalse = 0;
var strFileData;

var fso, objFile, objTS;
fso = new ActiveXObject("Scripting.FileSystemObject");
objFile = fso.GetFile("Sample2GBFile");

strFileData = objTS.Read(objFile.Size);
if(strFileData .indexOf("String to search") > 0 )
{
wShShell.Echo("Found...");
} 

上記のコードでは、2 GB のファイルがバッファーに収まらないため、バッファー オーバーフローが発生しています。これを解決する方法を教えてください。

4

2 に答える 2

1

ファイルの小さな部分を読み取り、文字列をチェックし、バッファを空にし、さらに読み取ります。チャンクを読み取るときは、文字列の長さを考慮して、チャンクをカットしてヒットを見逃さないようにしてください。

于 2011-03-31T12:22:05.410 に答える
0

ファイル全体を読み取るのではなく、行をループします

http://techsupt.winbatch.com/ts/T000001033F64.html

:test4
; read single chars from a line, count chars.
testfile = "d:\temp\test.ascii.txt"
MyFile = fso.OpenTextFile(testfile, ForReading)       ; Open a file as a TextStream
ThisLine = ""
While !MyFile.AtEndOfLine                             ; Is the current position at the end of a line? 
   ThisColumnCount = MyFile.Column                    ; Current column number.
   ThisLine        = StrCat(ThisLine, MyFile.Read(1)) ; Read a specific number of characters into a string.
   NextColumnCount = MyFile.Column                    ; Current column number.
EndWhile
MyFile.Close                                          ; Close a text stream.
ObjectClose(MyFile)

:test5
; read lines, count lines.
testfile = "d:\temp\test.ascii.txt"
MyFile = fso.OpenTextFile(testfile, ForReading)       ; Open a file as a TextStream
While !MyFile.AtEndOfStream                           ; Is the current position at the end of the stream?
   ThisLineCount = MyFile.Line                        ; Current line number.
   ThisLine      = MyFile.ReadLine                    ; Read an entire line into a string.
   NextLineCount = MyFile.Line                        ; Current line number.
EndWhile
MyFile.Close                                          ; Close a text stream.
ObjectClose(MyFile)
于 2011-03-31T12:24:33.687 に答える