文字カウント

提供:MeryWiki
2014年2月1日 (土) 22:25時点におけるMasme (トーク | 投稿記録)による版 (概要に「容量を一度に計算できる」点を追加。)
ナビゲーションに移動 検索に移動

選択範囲or文書全体の字数・容量を算出するマクロです。
Shift_JIS/UTF-16 (BOM無)/UTF-8 (BOM無) での容量を一度に確認できます。

CharacterCounter.png

【注意点】

  • 改行はすべて CR+LF として計算します(Mery の仕様上、改行コードを判別できないため)。
  • Shift_JIS は Microsoft コードページ 932 (CP932) / Windows-31J の仕様に準拠しています。
  • Unicode 対応は一部に留まります。
    • サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。
    • 結合/合成文字や異体字セレクタは、以下の理由により対応保留中です。現状ではMery と同じ仕様でカウントされます。
      • 他の字と組み合わせて1文字を構成する性質上、総数には含めない、という対応で良いのか否か。
      • 日本語環境では出番の無さそうなインド系文字の結合/合成文字にもきちんと対応すべきか否か。
    • ゼロ幅空白や制御文字 (LRO/RLO など) は、対応未定です。
  • カウントする文字数や文字種が増えるほど処理に時間がかかります(作者の環境では、100万字の処理に約1秒かかりました)。
    ステータスバーに処理に要した時間が表示されますので参考にしてください。

ソースコード

ダウンロード→ 文字カウント.zip

  • 拙作ですがアイコンファイルを同梱してあります。
    Mery の My Macros フォルダにアイコンファイル (文字カウント.ico) を配置すれば、ツールバーにアイコンが読み込まれます。

文字種別一覧

デフォルトで定義されている文字種は下表のとおりです。分類は Shift_JIS (CP932) を基準にしています。

 赤地  の項目は、デフォルトで表示結果に採用されている項目です。
「総字数」= 総数 、「字数」=総数 から  改行  空白  を引いた数、となっています。

分類
type
該当文字 /正規表現/
re
容量 (byte)
sjis/utf16/utf8
備考
階層 /^(?=\.)/gm ピリオドで始まる行 (階層付きテキスト)
段落 /^(?= [^ \s]+)/gm 全角空白1字下げで始まる行
会話 /^(?=「.+」$)/gm 「 で始まり 」 で終わる行 (会話文)
英単 /\b(?=\w)/g 0-9A-Za-z_ で構成される単語
総数
制御 改行 CR+LF
CR または LF
2 / 4 / 2
1 / 2 / 1
※仕様上、改行は CR+LF とみなす
ASCII制御文字
空白 タブ /\t/g 1 / 2 / 1 ASCII制御文字
/[\x00-\x1F\x7F]/g 1 / 2 / 1 上記以外のASCII制御文字
半角 空白 半空 / /g 1 / 2 / 1 ASCII文字
数字 半数 /[0-9]/g 1 / 2 / 1 ASCII文字
英字 半英 /[A-Za-z]/g 1 / 2 / 1 ASCII文字
記号 /[!-/:-@[-`{-~]/g 1 / 2 / 1 空白・英数以外のASCII文字
半カナ /[。「」、・ー゙゚]/g 1 / 2 / 3
仮名 /[ヲ-ッア-ン]/g 1 / 2 / 3
全角 空白 全空 / /g 2 / 2 / 3
数字 全数 /[0-9]/g 2 / 2 / 3
英字 全英 /[A-Za-z]/g 2 / 2 / 3
仮名 かな /[ぁ-ん]/g 2 / 2 / 3
カナ /[ァ-ヶ]/g 2 / 2 / 3
ギリシャ /[Α-ΡΣ-Ωα-ρσ-ω]/g 2 / 2 / 2 ※SJISではシグマの語末形 ς を扱えない
キリル /[ЁА-Яа-яё]/g 2 / 2 / 2 ※Unicodeでは Ё ё の配置が異なる
記号 /[´¨±×÷°§¶]/g 2 / 2 / 2 UTF-8で2バイトの全角記号(8字)
/[、。, (中略) †‡◯]/g 2 / 2 / 3 UTF-8で3バイトの全角記号(138字)
罫線 /[─│┌ (中略) ┥┸╂]/g 2 / 2 / 3 罫線素片(32字)
漢字 第一 /[亜唖娃 (中略) 湾碗腕]/g 2 / 2 / 3 JIS第一水準漢字(2965字)
第二 /[弌丐丕 (中略) 瑤凜熙]/g 2 / 2 / 3 JIS第二水準漢字(3390字)
MS拡張 /[纊褜鍈 (中略) 鶴鸙黑]/g 2 / 2 / 3 IBM拡張文字(漢字360字)
/[①-⑳Ⅰ (中略) ¦'"]/g 2 / 2 / 3 NEC特殊/IBM拡張文字(記号等87字)
MS外字 /[\uE000-\uE757]/g 2 / 2 / 3 Microsoft ユーザー定義外字領域(1880字)
/[\uF8F0-\uF8F3]/g 1 / 2 / 3 ※SJIS保存時、0xA0/FD/FE/FF に変換される
Uni /[¢£«¬¯µ·¸»]/g 2 / 2 / 2 ※SJIS保存時、よく似た全角文字に変換される
/ゔ/g 2 / 2 / 3 ※SJIS保存時、全角カナの ヴ に変換される
/[\u0080-\u07FF]/g 1? / 2 / 2 上記以外のUTF-8で2バイトの文字
SP /[\uD800-\uDBFF][\uDC00-\uDFFF]/g 2? / 4 / 4 サロゲートペア (U+10000-10FFFF)
/[\u0800-\uFFFF]/g 1? / 2 / 3 上記以外のUTF-8で3バイトの文字
  • Shift_JIS では、 Uni  に分類される文字を正常に保存することができません。保存を強行した場合は、よく似た文字や ? の文字に変換されます。
  • Shift_JIS では、 MS拡張  に分類される文字は「機種依存文字」に該当するため、Windows 以外では文字化けする可能性があります。

文字種別について

文字種の分類は、ソースコードの最初のほうにある「検索リスト」の部分で定義されています。

var list = [
{sjis:数値,utf16:数値,utf8:数値, type:"文字列", re:正規表現},
 中略
];
key(添字) value(値) 説明
re 正規表現
(RegExp)
カウントしたい文字を正規表現で記述します。
たとえば全角カタカナなら、re:/[ァ-ヶ]/g という具合です。
利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。
type 文字列
(String)
文字種の分類名です。複数設定したい場合はカンマで区切ります。
たとえば、type:"総数,全角,カナ" という具合です。
この場合、type["総数"], type["全角"], type["カナ"] の変数にカウントが加算されます。
sjis
utf16
utf8
数値
(Number)
Shift_JIS/UTF-16/UTF-8 での1文字 (1カウント) あたりの容量(バイト)設定です。
省略した場合は 0 とみなされます。

表示結果について

表示される結果は、ソースコードの最後のほうにある「ここから~ここまで結果の定義」の部分で定義されています。
ソースコードを単純化すると、以下のような処理になっています。

var result = (出力用のテキストを生成);
Alert(result);
スポンサーリンク