• 締切済み

「VBScript」ADODB.Streamにおけるファイル読み込みについて(他

以下の解決方法をご教授願えませんでしょうか。 宜しくお願いいたします。 前提:ギガバイト単位のテキストファイル(サーバのログファイル)を扱うスクリプトを作成したい。 必須機能:grep機能、動作が軽快で早い事  また、できるだけ外部ツールを使用したくない事(サーバ上に載せる事も視野に入る為) 私が行った事: 1. まずテキストファイルとしてgrepするスクリプトを作成。  方法(1) ReadLineで1行ずつ読み込み、正規表現にてマッチする行を変数に格納  その後、その変数をファイルに書き出ししてみた。   ⇒処理速度が遅すぎて使い物にならない。  方法(2) &演算に処理を食い、速度が遅くなる為、一度ファイルを読み込み  正規表現にてマッチしない行を1度に削除し、新しいファイルに書き出してみた   ⇒テストファイルだと狙った通りに処理がかなり早くなったが、実ファイルが    ギガバイト単位の為、メモリオーバーフローを起こし使い物にならない    (ま、そりゃそうだよねorz)  方法(3) &演算に処理を食うのは避けたい為、ReadLineにて行毎に読み込み、  正規表現にてマッチした行をWriteLineにてファイルに書き出し。   ⇒(1)よりは早くなり、ひとまず完成。ただし、それでも処理が遅いのと    CPUパワーを使う為に処理中他の作業がし辛いのが問題。 2. そこで、1度捨てた(2)の方法を何とか使えないかと思案し、ファイルを   適当なサイズで分割する形にしようかと思い、以下の分割用スクリプトを作成   ⇒でも、結局LoadFromFileにてメモリ上にファイルを展開する為、    メモリオーバーフローを起こす事に。 要は、c言語のfreadみたいな事ができれば解決できると思うのですが… この方法に限らず、何かいい案があればアドバイスをお願いいたします。 以下、バイナリーにて分割するスクリプト Option Explicit Const FilePath = "分割対象ファイルパス" Const ReadLen = 134217728 Dim bytData, intX intX = 0 With CreateObject("ADODB.Stream")  .Open  .Type = 1  .LoadFromFile(FilePath)  .Position = 0  Do Until .EOS   bytData = .Read(ReadLen)   With CreateObject("ADODB.Stream")    .Open    .Type = 1    .Write(bytData)    .SaveToFile FilePath & "." & CStr(intX), 1    .Close   End With   intX = intX + 1  Loop  .Close End With

みんなの回答

回答No.1
LA_10
質問者

お礼

ありがとうございます。 確かにWScript.Execからcmd.exeを呼び出して、findstrをつかえばいけますね。

関連するQ&A