「文字カウント」の版間の差分
ナビゲーションに移動
検索に移動
マクロ更新 |
マクロ更新。「文字種一覧」を「文字分類」に改称。 |
||
| 1行目: | 1行目: | ||
<div style="float:right">__TOC__</div> | <div style="float:right">__TOC__</div> | ||
選択範囲or文書全体の字数を算出するマクロです。 | |||
[[ファイル:CharacterCounter.png|border]] | [[ファイル:CharacterCounter.png|border]] | ||
| 7行目: | 7行目: | ||
==注意点== | ==注意点== | ||
* 改行・半角文字・全角文字、すべて1文字とカウントします。 | * 改行・半角文字・全角文字、すべて1文字とカウントします。 | ||
* Shift_JIS | * 文字の分類は Shift_JIS (CP932) を基準にしています。 | ||
* Unicode 対応は一部に留まります。 | * Unicode 対応は一部に留まります。 | ||
** サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。 | ** サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。 | ||
** | ** 結合文字列や異体字セレクタなどには対応していません。他の文字と同じようにカウントされます。 | ||
* | * 文字数や文字種が増えるほど処理に時間がかかります(作者の環境では100万字の処理に約1.5秒かかりました)。<br>マクロ実行後、ステータスバーに処理に要した時間が表示されるので参考にしてください。 | ||
==ソースコード== | ==ソースコード== | ||
| 21行目: | 21行目: | ||
[[ファイル:文字カウント.zip]] | [[ファイル:文字カウント.zip]] | ||
* 2019/06/16 | |||
** 容量は ADODB.Stream を利用して算出するようにした(マクロ「[[バイト数]]」の ks 氏版を参考)。 | |||
** 文字分類を改訂。 | |||
*** 容量の定義を撤廃し、統合できる項目を統合。 | |||
*** 分類「階層」を削除。 | |||
*** 分類「空白」に「改行」を含めるようにした。 | |||
*** 分類「半カナ」を「半カナ」に改称。 | |||
*** 分類「MS依存」を追加。 | |||
*** CP932 未定義文字の分類を "総数,MS外字" → "総数,MS依存" に変更。 | |||
** 結果表示を改訂。 | |||
*** 「段落」を復活。 | |||
*** 「仮名」を追加(仮名文字の数と、「字数」に占める割合を表示)。 | |||
*** 「サイズ」を追加(現在のエンコードでの容量を表示)。 | |||
*** 「UTF-16」「UTF-8」「SJIS」は非表示に変更。 | |||
*** 「原稿」「漢字」「UTF-7」「EUC」「JIS」を追加(非表示)。 | |||
** アイコンのカラーパレットを調整。48x48の画像を一部変更(1と3)。 | |||
* 2018/08/04 | * 2018/08/04 | ||
** | ** Document.LineEnding が使える場合は使うようにした(Mery 2.6.10 以降)。 | ||
**: | **: 改行コードの判別にクリップボードを使わずに済むため、難点が解消されます。 | ||
* 2017/06/25 | * 2017/06/25 | ||
** アイコンファイルに24x24・32x32・48x48の画像を追加。 | ** アイコンファイルに24x24・32x32・48x48の画像を追加。 | ||
| 29行目: | 45行目: | ||
** アイコンの指定先を "My Macros\文字カウント.ico" → "文字カウント.ico" に変更。 | ** アイコンの指定先を "My Macros\文字カウント.ico" → "文字カウント.ico" に変更。 | ||
* 2015/09/30 | * 2015/09/30 | ||
** | ** 改行コードを判別し、容量に反映するようにした。ただし、判別にクリップボードを使うため、難点があります。 | ||
*** | *** 計測範囲に改行が存在しない場合は判別できない。 | ||
*** | *** クリップボード履歴が重複してしまう。 | ||
** | ** 結果表示を改訂。 | ||
*** | *** 「段落」は非表示に変更(後述の定義変更による)。 | ||
*** 「拡張」を「依存」に改称し、MS拡張 → | *** 「拡張」を「依存」に改称し、MS拡張 → MS拡張+MS外字 の数に変更。 | ||
*** 「サロゲート」を「ペア」に改称。 | *** 「サロゲート」を「ペア」に改称。 | ||
*** | *** 「SJIS」の内容を「数値 bytes」→「数値 バイト」に変更。 | ||
*** | *** 「UTF-16」の内容を「数値 bytes (BOM無)」→「数値+2(BOM) バイト」に変更。 | ||
*** | *** 「UTF-8」の内容を「数値 bytes (BOM無)」→「数値+3(BOM) バイト」に変更。 | ||
** | ** 文字分類を改訂。 | ||
** | *** 分類「段落」の定義を変更。 /^(?= [^ \s])/gm → /^(?![ \t]*$)/gm | ||
* | *** 分類「英単」を「半英単」に改称し、定義を変更。 /\b(?=\w)/g → /(?=[!-~](?![!-~]))/g | ||
** | ***: Microsoft Word の文字カウント仕様(段落数、半角英数の単語数)に近づけた。<br>※仕様が不明なため、完全再現は目指していません。 | ||
**: Microsoft Word | *** 分類「会話」を削除。 | ||
** | *** ユーザー定義外字の分類を "総数,MS外字" → "総数,MS外字,全角" に変更。 | ||
** 文字 U+0080 | *** 文字 U+0080 の分類を "総数,Uni" → "総数,MS外字" に変更。 | ||
** | *** Shift_JIS で保存すると似た字に化ける文字群を追加。 | ||
* 2014/02/17 | * 2014/02/17 | ||
** | ** アウトラインやアウトプットにフォーカスがある場合、カウントできないのを修正。 | ||
**: Document → Editor.ActiveDocument | **: 文書の取得を Document → Editor.ActiveDocument に変更。 | ||
** | ** 分類「段落」の正規表現を短縮。 /^(?= [^ \s]+)/gm → /^(?= [^ \s])/gm | ||
** | ** 分類「会話」の定義を変更。 /^(?=「.+」$)/gm → /^(?=「.*」$)/gm | ||
* 2014/02/01 | * 2014/02/01 | ||
** 初版公開。 | ** 初版公開。 | ||
== | ==文字分類== | ||
現在の定義は下表のとおりです。分類は Shift_JIS (CP932) を基準にしています。 | |||
* <b style="background:#fcc;">赤地</b> の項目は、初期状態で結果表示される項目です。 | |||
* 「字数」は <b style="background:#fcc;">総数</b> − <b style="background:#ccf;">空白</b> で算出されます。 | |||
{|class="wikitable" | |||
!colspan="4"| 分類 (type) !! 正規表現 (re) !! 備考 | |||
{|class="wikitable | |||
!colspan="4"| 分類 (type) | |||
! | |||
|- | |- | ||
!rowspan=" | !rowspan="2" style="background:#ccc;"| | ||
!colspan="3"| | !colspan="3"| 半英単 | ||
| / | | /(?=[!-~](?![!-~]))/g || ASCII文字の単語(半角英数の単語) | ||
|- | |- | ||
!colspan="3"| 段落 | !colspan="3" style="background:#fcc;"| 段落 | ||
| /^(?![ \t]*$)/gm | | /^(?![ \t]*$)/gm || 空白行でない論理行 | ||
|- | |- | ||
!rowspan="28" style="background:#fcc;"| 総数 | |||
!rowspan=" | |||
|- | |- | ||
!rowspan="3"| 制御 | !rowspan="3"| 制御 | ||
!style="background:# | !rowspan="2" style="background:#ccf;"| 空白 | ||
| | !style="background:#fcc;"| 改行 | ||
| /\n/g || ASCII制御文字(改行) | |||
|- | |- | ||
! タブ | |||
| /\t/g || | | /\t/g || ASCII制御文字(水平タブ) | ||
|- | |- | ||
!style="background:#ccc; | !colspan="2" style="background:#ccc;"| | ||
| /[\u0000-\u001F\u007F]/g | | /[\u0000-\u001F\u007F]/g || 上記以外のASCII制御文字 | ||
|- | |- | ||
!rowspan="6" style="background:#fcc;"| 半角 | !rowspan="6" style="background:#fcc;"| 半角 | ||
!style="background:#ccf;"| 空白 !! 半空 | !style="background:#ccf;"| 空白 !! 半空 | ||
| / /g || | | / /g || ASCII文字(半角空白) | ||
|- | |- | ||
! 数字 !! 半数 | ! 数字 !! 半数 | ||
| /[0-9]/g || | | /[0-9]/g || ASCII文字(半角数字) | ||
|- | |- | ||
! 英字 !! 半英 | ! 英字 !! 半英 | ||
| /[A-Za-z]/g || | | /[A-Za-z]/g || ASCII文字(半角英字) | ||
|- | |- | ||
!rowspan="2"| 記号 | !rowspan="2"| 記号 | ||
!style="background:#ccc;"| | !style="background:#ccc;"| | ||
| /[\u0020-\u007E]/g | | /[\u0020-\u007E]/g || 上記以外のASCII文字 | ||
|- | |- | ||
!style="background:#fcc; | !rowspan="2" style="background:#fcc;"| 半カナ | ||
| /[。「」、・ー゙゚]/g | | /[。「」、・ー゙゚]/g || | ||
|- | |- | ||
! 仮名 | !style="background:#fcc;"| 仮名 | ||
| /[ヲ-ッア-ン]/g | | /[ヲ-ッア-ン]/g || | ||
|- | |- | ||
!rowspan=" | !rowspan="15" style="background:#fcc;"| 全角 | ||
!style="background:#ccf;"| 空白 !! 全空 | !style="background:#ccf;"| 空白 !! 全空 | ||
| / /g | | / /g || | ||
|- | |- | ||
! 数字 !! 全数 | ! 数字 !! 全数 | ||
| /[0-9]/g | | /[0-9]/g || | ||
|- | |- | ||
! 英字 !! 全英 | ! 英字 !! 全英 | ||
| /[A-Za-z]/g | | /[A-Za-z]/g || | ||
|- | |- | ||
!rowspan="2"| 仮名 | !rowspan="2" style="background:#fcc;"| 仮名 | ||
! かな | ! かな | ||
| /[ぁ-ん]/g | | /[ぁ-ん]/g || ※SJISでは ゔ ゕ ゖ などは扱えない | ||
|- | |- | ||
! カナ | ! カナ | ||
| /[ァ-ヶ]/g || | | /[ァ-ヶ]/g || ※長音符や踊り字は記号扱い | ||
|- | |- | ||
!colspan="2"| ギリシャ | !colspan="2"| ギリシャ | ||
| /[Α-ΡΣ-Ωα-ρσ-ω]/g | | /[Α-ΡΣ-Ωα-ρσ-ω]/g || ※SJISではシグマの語末形 ς は扱えない | ||
|- | |- | ||
!colspan="2"| キリル | !colspan="2"| キリル | ||
| /[ЁА-Яа-яё]/g | | /[ЁА-Яа-яё]/g || ※Unicodeでは Ё ё の配置がJISと異なる | ||
|- | |- | ||
! | !colspan="2"| 記号 | ||
| /[、。, (中略) ‡¶◯]/g || 記号 (146字) | |||
| /[、。, (中略) | |||
|- | |- | ||
!colspan="2"| 罫線 | !colspan="2"| 罫線 | ||
| /[─│┌ (中略) ┥┸╂]/g | | /[─│┌ (中略) ┥┸╂]/g || 罫線素片 (32字) | ||
|- | |- | ||
!rowspan="3"| 漢字 | !rowspan="3"| 漢字 | ||
! 第一 | ! 第一 | ||
| /[亜唖娃 (中略) 湾碗腕]/g | | /[亜唖娃 (中略) 湾碗腕]/g || JIS第一水準漢字 (2965字) | ||
|- | |- | ||
! 第二 | ! 第二 | ||
| /[弌丐丕 (中略) 瑤凜熙]/g | | /[弌丐丕 (中略) 瑤凜熙]/g || JIS第二水準漢字 (3390字) | ||
|- | |- | ||
! | !rowspan="2"| MS拡張 | ||
| /[纊褜鍈 (中略) 鶴鸙黑]/g || 2 | |rowspan="2"| /[纊褜鍈 (中略) 鶴鸙黑]/g ||rowspan="2"| IBM拡張文字 (漢字360字) | ||
|- | |- | ||
!style="background:# | !rowspan="4" style="background:#fcc;"| MS依存 | ||
|- | |- | ||
! | ! MS拡張 | ||
| /[①-⑳ (中略) ¦'"]/g || NEC特殊文字/IBM拡張文字 (記号等87字) | |||
| /[ | |||
|- | |- | ||
| /[\ | ! MS外字 | ||
| /[\uE000-\uE757]/g || Microsoft ユーザー定義外字 (1880字) | |||
|- | |- | ||
!style="background:#ccc;"| | !style="background:#ccc;"| | ||
!style="background:#ccc;"| | |||
| /[\u0080\uF8F0-\uF8F3]/g || CP932 未定義文字 (5字) | |||
!style="background:#ccc; | |||
| /[ | |||
|- | |- | ||
!style="background:# | !rowspan="2" style="background:#fcc;"| Uni | ||
| /[\ | !colspan="2" style="background:#fcc;"| SP | ||
| /[\uD800-\uDBFF][\uDC00-\uDFFF]/g || サロゲートペア (U+10000~10FFFF) | |||
|- | |- | ||
! | !colspan="2" style="background:#ccc;"| | ||
| /[\u0000-\uFFFF]/g || 上記以外の全文字 | |||
| /[\ | |||
|} | |} | ||
* | * <b style="background:#fcc;">Uni</b> に分類される文字は、Shift_JIS では正常に保存できません。保存を強行した場合、似た文字や <code>?</code> に化けます。 | ||
* | * <b style="background:#fcc;">MS依存</b> に分類される文字は、Shift_JIS では「環境依存文字」に該当します。 | ||
* 改行の定義が <code>/\n/g</code> なのは Mery の内部改行コードが [LF] で統一されているためです。 | |||
== | ===文字分類の仕様=== | ||
文字分類は、ソースコードの最初あたりにある「■文字分類」以下で定義されています。 | |||
<source lang="javascript"> | <source lang="javascript"> | ||
//■文字分類 | |||
{ | {type:"総数,全角,カナ", re:/[ァ-ヶ]/g}, //一例 | ||
/* 以下略 */ | |||
</source> | </source> | ||
{|class="wikitable" | {|class="wikitable" | ||
! re | ! re | ||
| | | カウントする対象を正規表現で記述します。<br>たとえば全角カタカナなら、<code style="color:#c00;">re:/[ァ-ヶ]/g</code> という具合です。<br>利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。 | ||
|- | |- | ||
! type | ! type | ||
| | | 分類名です。複数設定する場合はコンマで区切ります。<br>たとえば、<code style="color:#c00;">type:"総数,全角,カナ"</code> という具合です。<br>この場合、type["総数"], type["全角"], type["カナ"] の各変数にカウントが加算されます。 | ||
|} | |} | ||
「文字カウント」マクロは、この定義を上から順に見て、該当する箇所を数えます。 | |||
==結果表示について== | ==結果表示について== | ||
2019年6月16日 (日) 16:50時点における版
選択範囲or文書全体の字数を算出するマクロです。
注意点
- 改行・半角文字・全角文字、すべて1文字とカウントします。
- 文字の分類は Shift_JIS (CP932) を基準にしています。
- Unicode 対応は一部に留まります。
- サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。
- 結合文字列や異体字セレクタなどには対応していません。他の文字と同じようにカウントされます。
- 文字数や文字種が増えるほど処理に時間がかかります(作者の環境では100万字の処理に約1.5秒かかりました)。
マクロ実行後、ステータスバーに処理に要した時間が表示されるので参考にしてください。
ソースコード
ダウンロード→ 文字カウント.zip
- 拙作ですがアイコンファイル (文字カウント.ico) を同梱してあります。
Mery 2.4.7 以降の場合、マクロ (文字カウント.js) と同じフォルダに、
Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、
アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。
更新履歴
- 2019/06/16
- 容量は ADODB.Stream を利用して算出するようにした(マクロ「バイト数」の ks 氏版を参考)。
- 文字分類を改訂。
- 容量の定義を撤廃し、統合できる項目を統合。
- 分類「階層」を削除。
- 分類「空白」に「改行」を含めるようにした。
- 分類「半カナ」を「半カナ」に改称。
- 分類「MS依存」を追加。
- CP932 未定義文字の分類を "総数,MS外字" → "総数,MS依存" に変更。
- 結果表示を改訂。
- 「段落」を復活。
- 「仮名」を追加(仮名文字の数と、「字数」に占める割合を表示)。
- 「サイズ」を追加(現在のエンコードでの容量を表示)。
- 「UTF-16」「UTF-8」「SJIS」は非表示に変更。
- 「原稿」「漢字」「UTF-7」「EUC」「JIS」を追加(非表示)。
- アイコンのカラーパレットを調整。48x48の画像を一部変更(1と3)。
- 2018/08/04
- Document.LineEnding が使える場合は使うようにした(Mery 2.6.10 以降)。
- 改行コードの判別にクリップボードを使わずに済むため、難点が解消されます。
- Document.LineEnding が使える場合は使うようにした(Mery 2.6.10 以降)。
- 2017/06/25
- アイコンファイルに24x24・32x32・48x48の画像を追加。
- 2015/12/26
- アイコンの指定先を "My Macros\文字カウント.ico" → "文字カウント.ico" に変更。
- 2015/09/30
- 改行コードを判別し、容量に反映するようにした。ただし、判別にクリップボードを使うため、難点があります。
- 計測範囲に改行が存在しない場合は判別できない。
- クリップボード履歴が重複してしまう。
- 結果表示を改訂。
- 「段落」は非表示に変更(後述の定義変更による)。
- 「拡張」を「依存」に改称し、MS拡張 → MS拡張+MS外字 の数に変更。
- 「サロゲート」を「ペア」に改称。
- 「SJIS」の内容を「数値 bytes」→「数値 バイト」に変更。
- 「UTF-16」の内容を「数値 bytes (BOM無)」→「数値+2(BOM) バイト」に変更。
- 「UTF-8」の内容を「数値 bytes (BOM無)」→「数値+3(BOM) バイト」に変更。
- 文字分類を改訂。
- 分類「段落」の定義を変更。 /^(?= [^ \s])/gm → /^(?![ \t]*$)/gm
- 分類「英単」を「半英単」に改称し、定義を変更。 /\b(?=\w)/g → /(?=[!-~](?![!-~]))/g
- Microsoft Word の文字カウント仕様(段落数、半角英数の単語数)に近づけた。
※仕様が不明なため、完全再現は目指していません。
- Microsoft Word の文字カウント仕様(段落数、半角英数の単語数)に近づけた。
- 分類「会話」を削除。
- ユーザー定義外字の分類を "総数,MS外字" → "総数,MS外字,全角" に変更。
- 文字 U+0080 の分類を "総数,Uni" → "総数,MS外字" に変更。
- Shift_JIS で保存すると似た字に化ける文字群を追加。
- 改行コードを判別し、容量に反映するようにした。ただし、判別にクリップボードを使うため、難点があります。
- 2014/02/17
- アウトラインやアウトプットにフォーカスがある場合、カウントできないのを修正。
- 文書の取得を Document → Editor.ActiveDocument に変更。
- 分類「段落」の正規表現を短縮。 /^(?= [^ \s]+)/gm → /^(?= [^ \s])/gm
- 分類「会話」の定義を変更。 /^(?=「.+」$)/gm → /^(?=「.*」$)/gm
- アウトラインやアウトプットにフォーカスがある場合、カウントできないのを修正。
- 2014/02/01
- 初版公開。
文字分類
現在の定義は下表のとおりです。分類は Shift_JIS (CP932) を基準にしています。
- 赤地 の項目は、初期状態で結果表示される項目です。
- 「字数」は 総数 − 空白 で算出されます。
| 分類 (type) | 正規表現 (re) | 備考 | |||
|---|---|---|---|---|---|
| 半英単 | /(?=[!-~](?![!-~]))/g | ASCII文字の単語(半角英数の単語) | |||
| 段落 | /^(?![ \t]*$)/gm | 空白行でない論理行 | |||
| 総数 | |||||
| 制御 | 空白 | 改行 | /\n/g | ASCII制御文字(改行) | |
| タブ | /\t/g | ASCII制御文字(水平タブ) | |||
| /[\u0000-\u001F\u007F]/g | 上記以外のASCII制御文字 | ||||
| 半角 | 空白 | 半空 | / /g | ASCII文字(半角空白) | |
| 数字 | 半数 | /[0-9]/g | ASCII文字(半角数字) | ||
| 英字 | 半英 | /[A-Za-z]/g | ASCII文字(半角英字) | ||
| 記号 | /[\u0020-\u007E]/g | 上記以外のASCII文字 | |||
| 半カナ | /[。「」、・ー゙゚]/g | ||||
| 仮名 | /[ヲ-ッア-ン]/g | ||||
| 全角 | 空白 | 全空 | / /g | ||
| 数字 | 全数 | /[0-9]/g | |||
| 英字 | 全英 | /[A-Za-z]/g | |||
| 仮名 | かな | /[ぁ-ん]/g | ※SJISでは ゔ ゕ ゖ などは扱えない | ||
| カナ | /[ァ-ヶ]/g | ※長音符や踊り字は記号扱い | |||
| ギリシャ | /[Α-ΡΣ-Ωα-ρσ-ω]/g | ※SJISではシグマの語末形 ς は扱えない | |||
| キリル | /[ЁА-Яа-яё]/g | ※Unicodeでは Ё ё の配置がJISと異なる | |||
| 記号 | /[、。, (中略) ‡¶◯]/g | 記号 (146字) | |||
| 罫線 | /[─│┌ (中略) ┥┸╂]/g | 罫線素片 (32字) | |||
| 漢字 | 第一 | /[亜唖娃 (中略) 湾碗腕]/g | JIS第一水準漢字 (2965字) | ||
| 第二 | /[弌丐丕 (中略) 瑤凜熙]/g | JIS第二水準漢字 (3390字) | |||
| MS拡張 | /[纊褜鍈 (中略) 鶴鸙黑]/g | IBM拡張文字 (漢字360字) | |||
| MS依存 | |||||
| MS拡張 | /[①-⑳ (中略) ¦'"]/g | NEC特殊文字/IBM拡張文字 (記号等87字) | |||
| MS外字 | /[\uE000-\uE757]/g | Microsoft ユーザー定義外字 (1880字) | |||
| /[\u0080\uF8F0-\uF8F3]/g | CP932 未定義文字 (5字) | ||||
| Uni | SP | /[\uD800-\uDBFF][\uDC00-\uDFFF]/g | サロゲートペア (U+10000~10FFFF) | ||
| /[\u0000-\uFFFF]/g | 上記以外の全文字 | ||||
- Uni に分類される文字は、Shift_JIS では正常に保存できません。保存を強行した場合、似た文字や
?に化けます。 - MS依存 に分類される文字は、Shift_JIS では「環境依存文字」に該当します。
- 改行の定義が
/\n/gなのは Mery の内部改行コードが [LF] で統一されているためです。
文字分類の仕様
文字分類は、ソースコードの最初あたりにある「■文字分類」以下で定義されています。
//■文字分類
{type:"総数,全角,カナ", re:/[ァ-ヶ]/g}, //一例
/* 以下略 */
| re | カウントする対象を正規表現で記述します。 たとえば全角カタカナなら、 re:/[ァ-ヶ]/g という具合です。利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。 |
|---|---|
| type | 分類名です。複数設定する場合はコンマで区切ります。 たとえば、 type:"総数,全角,カナ" という具合です。この場合、type["総数"], type["全角"], type["カナ"] の各変数にカウントが加算されます。 |
「文字カウント」マクロは、この定義を上から順に見て、該当する箇所を数えます。
結果表示について
表示される結果は、ソースコードの最後のほうにある「ここから~ここまで結果表示の定義」の部分で定義されています。
ソースコードを単純化すると、以下のような処理になっています。
var result = (※出力用のテキストを生成);
Alert(result);
スポンサーリンク
