複数行テキストの検索・置換

鈴川エディタホームページ


2016年05月06日16:30更新
2016年04月25日11:45更新
2016年04月15日14:45更新
2016年04月12日13:15更新
2016年04月11日15:30更新
2016年04月06日09:45更新
2016年04月05日15:00追加

複数行テキストの検索と置換

鈴川エディタ改良版は、複数行テキストの検索・置換機能の追加を主軸に置いていますが、この改良はもうすぐ終了します。ここで他のテキストエディタの検索・置換機能と比較してみます。

  1. テキストエディタ

    ここで取り上げるテキストエディタは以下の性能を備えていることが条件になっています。

    1. 読み込み・編集できるファイルサイズは1GB以上、行数は1000万行以上である
    2. 複数行テキストの検索・置換機能を備えている
    3. 海外のテキストエディタについては多くを知らないので、ここでは「巨大テキストエディター世界トップ3」で取り上げた次の二つだけ取り上げる

  2. テスト条件

    検索・置換と検索のみに要する時間を調べるテストは以下の条件で実行します。

    1. 使用パソコンはこちら
    2. 次に示す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個つなげたもの
    3. 対象テキストファイルの文字コードはUnicode = UTF-16LE(BOM)。
    4. 対象テキストファイルはほとんど日本語(ひらがな、漢字)、一部アルファベット、数字が混じる。
    5. 検索文字列は13行、4458個の日本語(ひらがな、漢字)文字列。
      ただし、秀丸エディタは文字数制限で2000文字。
      Mifesは1000バイトが限度で約500文字。
      検索のみ実行する場合、検索・置換と同じ検索文字列を使用する。ただし、その検索文字列の一部を変更して対象テキストファイルの最後に追加しこれを検索する方法をとる。
    6. 置換文字列は11行、179個の日本語(ひらがな、漢字)文字列。
    7. 正規表現は使用しない。

  3. テスト結果

    結果は表1の通りです。表1で①~④と備考の上段は検索・置換、下段は検索を示します。表中の時間が検索・置換、検索にかかった時間です。テキストエディタの順序は取り扱い可能なファイルサイズ、行数の大きさに従っています。

    表1 - 各テキストエディタの上段:検索・置換、下段:検索のみ

    テキスト
    エディタ
    性 能
    1.2GB
    920万行
    13,457個

    12GB
    9200万行
    134,570個

    120GB
    9億2000万行
    1,345,700個

    1200GB
    92億行
    13,457,000個
    備 考
    鈴川
    エディタ

    32bit
    5TB以上
    2兆5000
    億行以上
    10秒
    10秒
    10秒
    3分45秒
    2分03秒
    1分49秒
    54分46秒
    53分49秒
    62分00秒
    572分
    744分
    863分
    備考A1
    6秒1分45秒
    14秒
    12秒
    20分10秒183分備考A2
    010
    Editor

    64bit
    数TB
    数千億行
    10秒
    (25秒)
    7分20秒
    (26分00秒)
    770分
    (TimeOver)
    - 備考B1
    1秒35秒12分00秒126分備考B2
    Pilot
    Edit

    64bit
    400GB
    150億行
    45秒
    (20秒)
    7分51秒
    (3分10秒)
    99分43秒
    (40分)
    - 備考C1
    8秒15秒25分00秒 - 備考C2
    Em
    Editor

    64bit
    248GB
    21億行
    5分00秒TimeOver - - 備考D1
    25秒3分51秒51分15秒 - 備考D2
    秀丸
    エディタ

    64bit
    数十GB
    1億行
    6分35秒TimeOver - - 備考E1
    15秒13分12秒 - - 備考E2
    Mifes
    32bit
    2GB
    数億行
    15秒 - - - 備考F1
    10秒 - - -

    1. 鈴川エディタ
      1. 鈴川エディタの検索・置換速度が他のテキストエディタに比べてかなり速い。鈴川エディタのワークファイル文字コードはShift_JIS、UTF-16LE(BOM)、UTF-8の3種類あり、編集がいちばん速いのがUTF-16LE(BOM)= Unicode。ワークファイル文字コードはオリジナルファイルの文字コードにかかわらず自由に選択可能。本テストではUnicodeを使用している。この点にご注意願う。
      2. 備考A1
        上段:初回実行、中段:Undo、下段:Redo。①~④でUndo、Redoができるのは鈴川エディタのみ。
      3. 備考A2
        ②上段:1回目、中段:2回目、下段:3回目。
    2. 010Editor
      1. ファイルサイズ:数TB、行数:数千億行
        私(鈴木)が私のパソコンで確認したところでは16GBメモリで1500億行(改行コードだけのテキストファイル)は読み込むことができるが、2000億行は読み込むことができない。テストはこれだけだが、これから推測して32GBメモリでは3000~4000億行、64GBメモリでは5000~8000億行を取り扱うことができるが、1兆行は通常のメモリサイズではできないのではないかと考えている。
      2. TimeOver
        5時間以上経過による中止。
      3. 備考B1
        時間は検索・置換状況をいちいち表示しながら実行する場合と表示しない場合を示す。下の( )内が表示しない場合である。置換状況を表示しながら実行する方が速くなっている。表示を伴うより表示なしで実行する方が速いのが常識的に納得できるのであるが、これは意外である。
        置換に対するUndo機能はあるが、置換数が大量であるのが原因か、すべて元にもどすことができない。
        010Editorはすぐれものであるが、③は恐ろしく長い時間がかかっている。実行を中止したとき、6時間以上経過しているにもかかわらず20%(プログレスバーの表示で判断、数値の表示はない)も進捗していないありさま。置換がこんなに遅いのは検索文字列の数が大量であるためと考えられる。たぶん数が少なければ高速に処理できるだろう。検索のみであると超高速である。
        ③のTimeOverの結果からみて、④については実行するまでもない。
      4. 備考B2
        ここで取り上げたテキストエディタの中では検索速度が一番速い。世界の他のテキストエディタは知らないが、世界最速かもしれない。
    3. PilotEdit
      1. ファイルサイズ:400GB、行数:150億行
        行数は400億行を取り扱うことができると謳っているが、未確認
      2. 備考C1
        ( )内は検索・置換が開始されるまでの時間を示す。この時間は何をしているのか不明だが、もしかしたら、置換前のテキストファイルを保存しているのかもしれない。PilotEditはUndoで置換前に戻すことができない。
      3. 備考C2
        ②非常に高速。③検索時「応答なし」状態を呈する。開始後すぐに検索が始まらない。メモリ使用量が大きい。(3850KB)
    4. EmEditor
      1. ファイルサイズ:248GB、行数:21億行までの巨大テキストファイルを扱うことができると謳っているが、検索・置換機能は本物の巨大テキストファイルに対してはほとんど役にたたず、数GB程度のテキストファイルに対しても極端に遅い。その証左を以下に示す。EmEditorと同じく巨大テキストエディタを謳う鈴川エディタ010EditorPilotEditと比較されたい。
        上のテストに加えて、2.4GB~6GB(②~⑤)のテキストファイルに対して実行した検索・置換の結果(要した時間)を表2に示す。
        追加テストしたテキストファイルは上のテストで示した対象テキストファイル1をそれぞれ、2~5個つなげたものである。
        検索文字列、置換文字列は上のテストと同じである。

        2016年04月25日11:45追加
        表2でEmEditorの行に( )付きの数値を追加した。これは開始から元に戻すためのデータを保存しないで実行した場合の時間である。上の( )がない数値は開始後数分間、元に戻すためのデータを保存しながら検索・置換を実行するが、数分後元に戻すためのデータを保存するメモリが足りなくなったのか、ダイアログが表示され、元に戻すことはできないが実行を続けるかどうか尋ねてくるので、このまま続行した場合の数値である。
        ②の場合がかなり短くなるが、他は大きな違いはない。趨勢に変わりはないのである。すなわち、EmEditorと他の三つの巨大テキストエディタ、鈴川エディタ010EditorPilotEditの間には天地の差があるということである。
        表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

        1. EmEditor
          ④と⑤のテストでは置換実行中に表示されるダイアログの表示がついたり消えたりを繰り返し、瞬間的ではあるが「応答なし」状態が頻繁に発生する。
          2016年04月25日11:45更新
        2. 鈴川エディタ
          上段:初回実行、中段:Undo、下段:Redo。①~⑤でUndo、Redoができるのは鈴川エディタのみ。⑤は3回実行したが、Undo、Redoの結果にかなりバラツキが見られる。ここでは一番長い時間を表示した。
        3. 010Editor
          置換状況を表示しながら実行する方が表示しないで実行するより速い。ここでは表示つきの実行結果を示す。置換のUndo機能を②で試してみたが、全部元に戻すことができない。置換数が少なければ当然全部元にもどすことができるだろう。
        4. PilotEdit
          表1の備考C1を参照。
      2. TimeOver
        5時間以上経過による中止。58250個置換。進捗43%。使用メモリ2000MB、22%。
      3. 備考D1
        ①の場合も遅いが、②も実質、実行できないということだ。5時間以上実行しても50%もできない。最後まで見届けるつもりであったが、さらに5時間以上かかると予想されたので、検索・置換は最後までやり遂げることができるとしても、時間がかかりすぎであることを確認できたということで、中止した。248GBまでの巨大テキストファイルを扱うことができるという触れ込みであるが、検索・置換数が10万個以上で大量であるとはいえ、12GB程度の巨大というほどではないファイルを検索・置換できないようでは情けない。③④については試すまでもない。

      4. (42分47秒)
      5. 備考D2
        他のテキストエディタに比較して検索はそれほど速くはない。③で他の巨大テキストエディタに比較して2倍以上時間がかかるが、巨大ファイルを最後まで検索できる点は評価できる。
    5. 秀丸エディタ
      1. TimeOver
        5時間以上経過による中止。34048個置換。進捗約25%。使用メモリ766MB。
      2. 備考E1
        ②についてはEmEditorと同じ。
        ただし、秀丸エディタは巨大ファイル編集可能と特別謳っているわけではない。この点はEmEditorとは異なる。
        ここで取り上げた中では検索・置換の速度が一番遅い。
      3. 備考E2
        ①検索速度は遅くはない。②開始後しばらくすると「応答なし」状態を呈するが最後まで実行。
    6. Mifes
      1. 備考F1
        検索・置換の速度は割合速いが、扱うことができるファイルサイズがいかにも小さい。Mifesは「巨大ファイルの編集」を謳っているが、いかんせん小さい。



Copyright (c) 2000 - 2017 鈴木由彦(Yoshihiko Suzuki)
e-Mail:szkwjp@gmail.com
HomePage:http://www.szkwjp.com/