「文字カウント」の版間の差分
ナビゲーションに移動
検索に移動
処理時間表示について文言修正 |
マクロ更新 |
||
| 21行目: | 21行目: | ||
[[ファイル:文字カウント.zip]] | [[ファイル:文字カウント.zip]] | ||
* 2018/08/04 | |||
** 改行コードの判別に Document.LineEnding が使える場合は使うようにした。(Mery 2.6.10 以降) | |||
**: 判別にクリップボードを使わずに済むため、難点が解消されます。 | |||
* 2017/06/25 | * 2017/06/25 | ||
** アイコンファイルに24x24・32x32・48x48の画像を追加。 | ** アイコンファイルに24x24・32x32・48x48の画像を追加。 | ||
2018年8月4日 (土) 09:47時点における版
選択範囲or文書全体の字数・容量を算出するマクロです。
注意点
- 改行・半角文字・全角文字、すべて1文字とカウントします。
- Shift_JIS は Windows-31J / Microsoft コードページ 932 (CP932) に準拠しています。
- Unicode 対応は一部に留まります。
- サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。
- 結合文字や異体字セレクタ、Unicode の空白文字や制御文字は考慮していません。これらは通常の文字と同様にカウントされます。
- 文字数や文字種が増えるほど処理に時間がかかります(作者の環境では、100万字の処理に約1.5秒かかりました)。
マクロ実行後、ステータスバーに処理時間が報告されるので参考にしてください。
ソースコード
ダウンロード→ 文字カウント.zip
- 拙作ですがアイコンファイル (文字カウント.ico) を同梱してあります。
Mery 2.4.7 以降の場合、マクロ (文字カウント.js) と同じフォルダに、
Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、
アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。
更新履歴
- 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
- Microsoft Word の文字カウント仕様(段落数)に近づけた。
- 分類「英単」を「半英単」に改称し、正規表現を変更。 /\b(?=\w)/g → /(?=[!-~](?![!-~]))/g
- Microsoft Word の文字カウント仕様(半角英数の単語数)に少しだけ近づけた。※仕様が不詳かつ複雑なため、完全再現は目指していません。
- 「MS外字」の分類(type)を "総数,MS外字" → "総数,MS外字,全角" に変更。
- 文字 U+0080 の分類(type)を "総数,Uni" → "総数,MS外字" に修正。
- 文字種一覧に「SJIS保存時、よく似た半角文字に変換される文字」を追加。
- 改行コードを判別し、容量に反映するようにした。ただし、判別にクリップボードを使う仕様上、下記の難点があります。
- 2014/02/17
- アウトラインやアウトプットにフォーカスがある場合、結果が 0 になってしまうのを修正。
- Document → Editor.ActiveDocument で文書を取得するようにした。
- 分類「段落」の正規表現を変更。 /^(?= [^ \s]+)/gm → /^(?= [^ \s])/gm
- 分類「会話」の正規表現を変更。 /^(?=「.+」$)/gm → /^(?=「.*」$)/gm
- アウトラインやアウトプットにフォーカスがある場合、結果が 0 になってしまうのを修正。
- 2014/02/01
- 初版公開。
文字種一覧
デフォルトで定義されている文字種は下表のとおりです。分類は Shift_JIS (CP932) を基準にしています。
赤地 の項目は、デフォルトで結果表示に採用されている項目です。ただし下記の項目は、計算により求められています。
- 「字数」= 総数 - 改行 - 空白 ※総字数から改行・空白を引いた数
- 「依存」= MS拡張 + MS外字
| 分類 (type) | 該当文字 (re) /正規表現/ |
容量 (sjis,utf16,utf8) |
備考 | |||
|---|---|---|---|---|---|---|
| 階層 | /^(?=\.)/gm | ピリオドで始まる行 (階層付きテキスト) | ||||
| 段落 | /^(?![ \t]*$)/gm | 空白行でない論理行 | ||||
| 半英単 | /(?=[!-~](?![!-~]))/g | ASCII文字による単語 (半角英数の単語) | ||||
| 総数 | ||||||
| 制御 | 改行 | ※CR+LF ※CR または LF |
2, 4, 2 1, 2, 1 |
ASCII制御文字 | ||
| 空白 | タブ | /\t/g | 1, 2, 1 | ASCII制御文字 | ||
| /[\u0000-\u001F\u007F]/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文字 | ||
| 記号 | /[\u0020-\u007E]/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 | ※SJISでは ゔ ゕ ゖ などは扱えない | ||
| カナ | /[ァ-ヶ]/g | 2, 2, 3 | ||||
| ギリシャ | /[Α-ΡΣ-Ωα-ρσ-ω]/g | 2, 2, 2 | ※SJISではシグマの語末形 ς は扱えない | |||
| キリル | /[ЁА-Яа-яё]/g | 2, 2, 2 | ※Unicodeでは Ё ё の配置がJISと異なる | |||
| 記号 | /[´¨±×÷°§¶]/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 | CP932 未定義文字 ※SJIS保存時、0xA0/FD/FE/FF/80 に変換される | ||||
| /\u0080/g | 1, 2, 2 | |||||
| Uni | /[¡¥¦©ª®²³¹º¿À-ÖØ-öø-ÿ]/g | 1, 2, 2 | ※SJIS保存時、よく似た半角文字に変換される | |||
| /[¢£«¬¯µ·¸»]/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 では、MS拡張 MS外字 に分類される文字は「環境依存文字」に該当し、Windows 以外では文字化けする可能性があります。
- Shift_JIS では、Uni に分類される文字を正常に保存できません。保存を強行した場合、よく似た文字や
?に変換されます。
文字種について
文字種の分類は、ソースコードの最初のほうにある「文字種の定義」の部分で定義されています。
var list = [
{sjis:数値,utf16:数値,utf8:数値, type:文字列, re:正規表現},
(中略)
];
| re | カウントしたい文字を正規表現で記述します。 たとえば全角カタカナなら、 re:/[ァ-ヶ]/g という具合です。利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。 |
|---|---|
| type | 文字種の分類名です。複数設定したい場合はカンマで区切ります。 たとえば、 type:"総数,全角,カナ" という具合です。この場合、type["総数"], type["全角"], type["カナ"] の変数にカウントが加算されます。 |
| sjis utf16 utf8 |
1文字 (1カウント) あたりの容量 (バイト) を設定します。 たとえば、 sjis:2,utf16:2,utf8:3 という具合です。それぞれ SJIS, UTF-16, UTF-8 での容量となります。省略した場合は 0 とみなします。 |
結果表示について
表示される結果は、ソースコードの最後のほうにある「ここから~ここまで結果表示の定義」の部分で定義されています。
ソースコードを単純化すると、以下のような処理になっています。
var result = (※出力用のテキストを生成);
Alert(result);
スポンサーリンク
