検索ヒット数表示(選択文字列)

提供:MeryWiki
2019年5月10日 (金) 21:56時点におけるSukemaru (トーク | 投稿記録)による版 (→‎ソースコード)
ナビゲーションに移動 検索に移動

ks 氏の「includeライブラリ」の StringEx.js(count 関数)と「検索ヒット数表示」マクロをもとに作成。

  • アクティブなタブの文書内から選択範囲の文字列に完全一致するものをカウントする。
  • ヒット件数はステータスバーに表示する。

選択範囲のある状態でマクロを手動で実行するか、「選択範囲が変更されたとき」のイベントマクロに設定して自動で実行させるのがよろしいかと。

なお、このマクロと Mery 標準の検索メソッドとでは、ヒット数のカウントの仕方が異なります。

e.g.あああああ」5文字だけの文書で「ああ」を検索した場合、このマクロでは "2件" とカウントしますが、Mery の検索メソッド(次を検索)では "4回" ヒットします。


※このマクロの実行にあたって include ライブラリは不要です。

※このマクロでは、イベントマクロで利用する場合の処理速度を優先させるために「検索ヒット数表示」(JScript) マクロのような正規表現検索には対応させていません。また、文字列のヒット判定では「大文字と小文字を区別する」が適用され、「単語のみを検索する」は適用されません。

※イベントマクロで利用する場合は「遅延時間」を適宜調整しないと、大きな文書の編集のさいに動作がもたつくことがあります。

オプション指定をつけてヒット数を調べたい場合は、「ポップアップメニューで検索先にジャンプ 」マクロの include 版をご利用ください(イベントマクロにはできませんが)。


ソースコード

#title = "ヒット件数(選択文字列)"
#tooltip = "検索ヒット数表示(選択範囲の文字列)"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",19

/**
 * アクティブなタブの文書内から選択範囲の文字列に完全一致するものをカウントする。
 * ヒット件数はステータスバーに表示する。
 * 
 * 選択範囲のある状態でマクロを手動で実行するか
 * イベント「選択範囲が変更されたとき」に設定して自動で実行させる。
 * 
 * ※ ks 氏の『includeライブラリ』より
 *     >> include/StringEx.js >> String.prototype.count() 
 *   のコードを拝借した。
 */

var timerStart = new Date();
Status = "";
var word = document.selection.Text;
if ( word ) {
  var len = word.length;
  var dText = document.Text;

  // 大文字/小文字の区別なしにするなら、以下2行をアンコメント
  // word = document.selection.Text.toLowerCase();
  // dText = dText.toLowerCase();

  var pos = 0,  hit = 0;
  while ( pos >= 0 ) {
    pos = dText.indexOf( word, pos );
    if ( pos >= 0 ) {
      pos += len;
      hit ++;
    }
  }
  var SeparateNum = function( num ) {
    return num.toString().replace( /(\d)(?=(?:\d{3})+$)/g, "$1," );
  }
  Status = " ヒット数:" + SeparateNum( hit ) + " 件";
  var TimerElapsed = function( end, start ) {
    var elapsedSec = ( ( end - start ) / 1000 ).toFixed( 3 );
    return "  [ " + elapsedSec.replace( /\./, ". " ) + " 秒 ]";
  }
  // 検索所要時間が不要なら以下の1行をコメントアウトせよ
  Status += TimerElapsed( new Date(), timerStart );
}
スポンサーリンク