複数行テキストの検索・置換
鈴川エディタホームページ
複数行テキストの検索と置換
鈴川エディタ改良版は、複数行テキストの検索・置換機能の追加を主軸に置いていますが、この改良はもうすぐ終了します。ここで他のテキストエディタの検索・置換機能と比較してみます。
- テキストエディタ
ここで取り上げるテキストエディタは以下の性能を備えていることが条件になっています。
- 読み込み・編集できるファイルサイズは1GB以上、行数は1000万行以上である
- 複数行テキストの検索・置換機能を備えている
- 海外のテキストエディタについては多くを知らないので、ここでは「巨大テキストエディター世界トップ3」で取り上げた次の二つだけ取り上げる
- テスト条件
検索・置換と検索のみに要する時間を調べるテストは以下の条件で実行します。
- 使用パソコンはこちら。
- 次に示す4種類のサイズのテキストファイルに対してテストを実行する。
- ① ファイルサイズ:約1.2GB、行数:約920万行、検索文字列:13,457個
- ② ファイルサイズ:約12GB、行数:約9200万行、検索文字列:134,570個、ファイル1を10個つなげたもの
- ③ ファイルサイズ:約120GB、行数:約9億2000万行、検索文字列:1,345,700個、ファイル1を100個つなげたもの
- ④ ファイルサイズ:約1200GB、行数:約92億行、検索文字列:13,457,000個、ファイル1を1000個つなげたもの
- 対象テキストファイルの文字コードはUnicode = UTF-16LE(BOM)。
- 対象テキストファイルはほとんど日本語(ひらがな、漢字)、一部アルファベット、数字が混じる。
- 検索文字列は13行、4458個の日本語(ひらがな、漢字)文字列。
ただし、秀丸エディタは文字数制限で2000文字。
Mifesは1000バイトが限度で約500文字。
検索のみ実行する場合、検索・置換と同じ検索文字列を使用する。ただし、その検索文字列の一部を変更して対象テキストファイルの最後に追加しこれを検索する方法をとる。
- 置換文字列は11行、179個の日本語(ひらがな、漢字)文字列。
- 正規表現は使用しない。
- テスト結果
結果は表1の通りです。表1で①~④と備考の上段は検索・置換、下段は検索を示します。表中の時間が検索・置換、検索にかかった時間です。テキストエディタの順序は取り扱い可能なファイルサイズ、行数の大きさに従っています。
表1 - 各テキストエディタの上段:検索・置換、下段:検索のみ
- 鈴川エディタ
- 鈴川エディタの検索・置換速度が他のテキストエディタに比べてかなり速い。鈴川エディタのワークファイル文字コードはShift_JIS、UTF-16LE(BOM)、UTF-8の3種類あり、編集がいちばん速いのがUTF-16LE(BOM)= Unicode。ワークファイル文字コードはオリジナルファイルの文字コードにかかわらず自由に選択可能。本テストではUnicodeを使用している。この点にご注意願う。
- 備考A1
上段:初回実行、中段:Undo、下段:Redo。①~④でUndo、Redoができるのは鈴川エディタのみ。
- 備考A2
②上段:1回目、中段:2回目、下段:3回目。
- 010Editor
- ファイルサイズ:数TB、行数:数千億行
私(鈴木)が私のパソコンで確認したところでは16GBメモリで1500億行(改行コードだけのテキストファイル)は読み込むことができるが、2000億行は読み込むことができない。テストはこれだけだが、これから推測して32GBメモリでは3000~4000億行、64GBメモリでは5000~8000億行を取り扱うことができるが、1兆行は通常のメモリサイズではできないのではないかと考えている。
- TimeOver
5時間以上経過による中止。
- 備考B1
時間は検索・置換状況をいちいち表示しながら実行する場合と表示しない場合を示す。下の( )内が表示しない場合である。置換状況を表示しながら実行する方が速くなっている。表示を伴うより表示なしで実行する方が速いのが常識的に納得できるのであるが、これは意外である。
置換に対するUndo機能はあるが、置換数が大量であるのが原因か、すべて元にもどすことができない。
010Editorはすぐれものであるが、③は恐ろしく長い時間がかかっている。実行を中止したとき、6時間以上経過しているにもかかわらず20%(プログレスバーの表示で判断、数値の表示はない)も進捗していないありさま。置換がこんなに遅いのは検索文字列の数が大量であるためと考えられる。たぶん数が少なければ高速に処理できるだろう。検索のみであると超高速である。
③のTimeOverの結果からみて、④については実行するまでもない。
- 備考B2
ここで取り上げたテキストエディタの中では検索速度が一番速い。世界の他のテキストエディタは知らないが、世界最速かもしれない。
- PilotEdit
- ファイルサイズ:400GB、行数:150億行
行数は400億行を取り扱うことができると謳っているが、未確認
- 備考C1
( )内は検索・置換が開始されるまでの時間を示す。この時間は何をしているのか不明だが、もしかしたら、置換前のテキストファイルを保存しているのかもしれない。PilotEditはUndoで置換前に戻すことができない。
- 備考C2
②非常に高速。③検索時「応答なし」状態を呈する。開始後すぐに検索が始まらない。メモリ使用量が大きい。(3850KB)
- EmEditor
-
ファイルサイズ:248GB、行数:21億行までの巨大テキストファイルを扱うことができると謳っているが、検索・置換機能は本物の巨大テキストファイルに対してはほとんど役にたたず、数GB程度のテキストファイルに対しても極端に遅い。その証左を以下に示す。EmEditorと同じく巨大テキストエディタを謳う鈴川エディタ、010Editor、PilotEditと比較されたい。
上のテストに加えて、2.4GB~6GB(②~⑤)のテキストファイルに対して実行した検索・置換の結果(要した時間)を表2に示す。
追加テストしたテキストファイルは上のテストで示した対象テキストファイル1をそれぞれ、2~5個つなげたものである。
検索文字列、置換文字列は上のテストと同じである。
2016年04月25日11:45追加
表2でEmEditorの行に( )付きの数値を追加した。これは開始から元に戻すためのデータを保存しないで実行した場合の時間である。上の( )がない数値は開始後数分間、元に戻すためのデータを保存しながら検索・置換を実行するが、数分後元に戻すためのデータを保存するメモリが足りなくなったのか、ダイアログが表示され、元に戻すことはできないが実行を続けるかどうか尋ねてくるので、このまま続行した場合の数値である。
②の場合がかなり短くなるが、他は大きな違いはない。趨勢に変わりはないのである。すなわち、EmEditorと他の三つの巨大テキストエディタ、鈴川エディタ、010Editor、PilotEditの間には天地の差があるということである。
表1から推測すると秀丸エディタもEmEditorと同様の結果になるだろう。多分、この二つは検索・置換のアルゴリズムが大筋では同じであると思われる。ここでは説明を省くが、このアルゴリズムでは検索文字列の数が大量であればあるほど、検索・置換にかかる時間は気が遠くなるほど長引くことになるだろう。特に巨大テキストエディタを謳うEmEditorは、もし本物の巨大テキストエディタを目指すならば、多分、この問題で四苦八苦することになると予想されるのである。
表2 - 検索・置換
テキスト エディタ | ① 1.2GB 920万行 13,457個 | ② 2.4GB 1840万行 26,914個 | ③ 3.6GB 2760万行 40,371個 | ④ 4.8GB 3680万行 53,828個 | ⑤ 6.0GB 4600万行 67,285個 | 備 考 |
Em Editor 64bit | 5分00秒 (5分05秒) | 29分21秒 (19分20秒) | 43分40秒 (42分47秒) | 78分00秒 (75分24秒) | 120分40秒 (117分15秒) | 備考A |
鈴川 エディタ 32bit | 10秒 10秒 10秒 | 20秒 16秒 19秒 | 30秒 30秒 38秒 | 40秒 46秒 52秒 | 56秒 1分33秒 1分31秒 | 備考B |
010 Editor 64bit | 10秒 | 23秒 | 43秒 | 1分15秒 | 2分05秒 | 備考C |
Pilot Edit 64bit | 45秒 (20秒) | 1分42秒 (49秒) | 2分13秒 (58秒) | 3分00秒 (1分20秒) | 3分41秒 (1分35秒) | 備考D |
- TimeOver
5時間以上経過による中止。58250個置換。進捗43%。使用メモリ2000MB、22%。
- 備考D1
①の場合も遅いが、②も実質、実行できないということだ。5時間以上実行しても50%もできない。最後まで見届けるつもりであったが、さらに5時間以上かかると予想されたので、検索・置換は最後までやり遂げることができるとしても、時間がかかりすぎであることを確認できたということで、中止した。248GBまでの巨大テキストファイルを扱うことができるという触れ込みであるが、検索・置換数が10万個以上で大量であるとはいえ、12GB程度の巨大というほどではないファイルを検索・置換できないようでは情けない。③④については試すまでもない。
(42分47秒)
- 備考D2
他のテキストエディタに比較して検索はそれほど速くはない。③で他の巨大テキストエディタに比較して2倍以上時間がかかるが、巨大ファイルを最後まで検索できる点は評価できる。
- 秀丸エディタ
- TimeOver
5時間以上経過による中止。34048個置換。進捗約25%。使用メモリ766MB。
- 備考E1
②についてはEmEditorと同じ。
ただし、秀丸エディタは巨大ファイル編集可能と特別謳っているわけではない。この点はEmEditorとは異なる。
ここで取り上げた中では検索・置換の速度が一番遅い。
- 備考E2
①検索速度は遅くはない。②開始後しばらくすると「応答なし」状態を呈するが最後まで実行。
- Mifes
- 備考F1
検索・置換の速度は割合速いが、扱うことができるファイルサイズがいかにも小さい。Mifesは「巨大ファイルの編集」を謳っているが、いかんせん小さい。
Copyright (c)2000 - 2018 鈴木由彦(Yoshihiko Suzuki)
e-Mail:szkwjp@gmail.com
HomePage:http://www.szkwjp.com/