タイトル : Re^3: テキストファイルの高速検索 投稿日 : 2010/04/07(Wed) 11:12 投稿者 : 魔界の仮面弁士
> どちらも7秒くらいで変わりません。 という事は、検索にかかる時間は無視できるという事ですね。 テキストファイルの読み込みに使うものとしては、以下のような手段があります。 SJIS / Unicode 変換のボトルネックもあるので、テキスト読み込みだけではなく バイナリ読み込みの手段についても列挙しています。 とりあえず、100MB 全データを読み捨てる実験コードを書いてみて、 それぞれの処理速度やコードの可読性を調べてみては如何でしょう。 (1) Line Input # で一行ずつ読み込み。 → 現在利用している方法。 (2) バイナリモードで Byte 配列に Get# し、StrConv で Unicode 化。 → 読み込みバッファサイズと、末尾文字の分断制御に注意。 Unicode 化せず、検索も(InStrB 等で)バイナリのまま行うという選択肢もあるかも。 (3) Input 関数(≠Input # ステートメント)でバイナリを読み込み、StrConv で Unicode 化。 → 注意点については(2)と同様。 (4) FileSystemObject の TextStream で読み込み。 → ReadAll は今回使い物にならないと思うので、ReadLine で読み込む事になるかと。 (5) ADODB.Stream のテキストモードで読み込み。 → adReadAll 指定は今回使えないので、adReadLine か文字数指定で。 (6) ADODB.Stream のバイナリモードで読み込み、StrConv で Unicode 化。 → (5) よりは高速だが、(2),(3) と同様の問題を考慮する必要がある。 (7) ODBC あるいは Jet の Text I-ISAM ドライバによる読み込み。 → Format をカスタム定義にして、そこに未使用文字を指定する必要がある。 http://msdn.microsoft.com/en-us/library/ms709353.aspx (8) ReadFile API による読み込み制御。 → 下記に、大容量ファイルの読み込みパフォーマンスについての話がありました。 http://d.hatena.ne.jp/wraith13/20080430/1209565632 |