「
文字カウント
」を編集中
2019年6月16日 (日) 16:51時点における
Masme
(
トーク
|
投稿記録
)
による版
(「結果表示」を拡充。(差分表示の見栄えのため分割編集))
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
ナビゲーションに移動
検索に移動
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
<div style="float:right">__TOC__</div> 選択範囲or文書全体の字数を算出するマクロです。 [[ファイル:CharacterCounter.png|border]] ==注意点== * 改行・半角文字・全角文字、すべて1文字とカウントします。 * 文字の分類は Shift_JIS (CP932) を基準にしています。 * Unicode 対応は一部に留まります。 ** サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。 ** 結合文字列や異体字セレクタなどには対応していません。他の文字と同じようにカウントされます。 * 文字数や文字種が増えるほど処理に時間がかかります(作者の環境では100万字の処理に約1.5秒かかりました)。<br>マクロ実行後、ステータスバーに処理に要した時間が表示されるので参考にしてください。 ==ソースコード== ダウンロード→ <b>[[メディア:文字カウント.zip|文字カウント.zip]]</b> * 拙作ですがアイコンファイル (文字カウント.ico) を同梱してあります。<br>Mery 2.4.7 以降の場合、マクロ (文字カウント.js) と同じフォルダに、<br>Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、<br>アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。 ==更新履歴== [[ファイル:文字カウント.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 ** 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 の文字カウント仕様(段落数、半角英数の単語数)に近づけた。<br>※仕様が不明なため、完全再現は目指していません。 *** 分類「会話」を削除。 *** ユーザー定義外字の分類を "総数,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) を基準にしています。 * <b style="background:#fcc;">赤地</b> の項目は、初期状態で結果表示される項目です。 * 「字数」は <b style="background:#fcc;">総数</b> − <b style="background:#ccf;">空白</b> で算出されます。 {|class="wikitable" !colspan="4"| 分類 (type) !! 正規表現 (re) !! 備考 |- !rowspan="2" style="background:#ccc;"| !colspan="3"| 半英単 | /(?=[!-~](?![!-~]))/g || ASCII文字の単語(半角英数の単語) |- !colspan="3" style="background:#fcc;"| 段落 | /^(?![ \t]*$)/gm || 空白行でない論理行 |- !rowspan="28" style="background:#fcc;"| 総数 |- !rowspan="3"| 制御 !rowspan="2" style="background:#ccf;"| 空白 !style="background:#fcc;"| 改行 | /\n/g || ASCII制御文字(改行) |- ! タブ | /\t/g || ASCII制御文字(水平タブ) |- !colspan="2" style="background:#ccc;"| | /[\u0000-\u001F\u007F]/g || 上記以外のASCII制御文字 |- !rowspan="6" style="background:#fcc;"| 半角 !style="background:#ccf;"| 空白 !! 半空 | / /g || ASCII文字(半角空白) |- ! 数字 !! 半数 | /[0-9]/g || ASCII文字(半角数字) |- ! 英字 !! 半英 | /[A-Za-z]/g || ASCII文字(半角英字) |- !rowspan="2"| 記号 !style="background:#ccc;"| | /[\u0020-\u007E]/g || 上記以外のASCII文字 |- !rowspan="2" style="background:#fcc;"| 半カナ | /[。「」、・ー゙゚]/g || |- !style="background:#fcc;"| 仮名 | /[ヲ-ッア-ン]/g || |- !rowspan="15" style="background:#fcc;"| 全角 !style="background:#ccf;"| 空白 !! 全空 | / /g || |- ! 数字 !! 全数 | /[0-9]/g || |- ! 英字 !! 全英 | /[A-Za-z]/g || |- !rowspan="2" style="background:#fcc;"| 仮名 ! かな | /[ぁ-ん]/g || ※SJISでは ゔ ゕ ゖ などは扱えない |- ! カナ | /[ァ-ヶ]/g || ※長音符や踊り字は記号扱い |- !colspan="2"| ギリシャ | /[Α-ΡΣ-Ωα-ρσ-ω]/g || ※SJISではシグマの語末形 ς は扱えない |- !colspan="2"| キリル | /[ЁА-Яа-яё]/g || ※Unicodeでは Ё ё の配置がJISと異なる |- !colspan="2"| 記号 | /[、。, (中略) ‡¶◯]/g || 記号 (146字) |- !colspan="2"| 罫線 | /[─│┌ (中略) ┥┸╂]/g || 罫線素片 (32字) |- !rowspan="3"| 漢字 ! 第一 | /[亜唖娃 (中略) 湾碗腕]/g || JIS第一水準漢字 (2965字) |- ! 第二 | /[弌丐丕 (中略) 瑤凜熙]/g || JIS第二水準漢字 (3390字) |- !rowspan="2"| MS拡張 |rowspan="2"| /[纊褜鍈 (中略) 鶴鸙黑]/g ||rowspan="2"| IBM拡張文字 (漢字360字) |- !rowspan="4" style="background:#fcc;"| MS依存 |- ! MS拡張 | /[①-⑳ (中略) ¦'"]/g || NEC特殊文字/IBM拡張文字 (記号等87字) |- ! MS外字 | /[\uE000-\uE757]/g || Microsoft ユーザー定義外字 (1880字) |- !style="background:#ccc;"| !style="background:#ccc;"| | /[\u0080\uF8F0-\uF8F3]/g || CP932 未定義文字 (5字) |- !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"> //■文字分類 {type:"総数,全角,カナ", re:/[ァ-ヶ]/g}, //一例 /* 以下略 */ </source> {|class="wikitable" ! re | カウントする対象を正規表現で記述します。<br>たとえば全角カタカナなら、<code style="color:#c00;">re:/[ァ-ヶ]/g</code> という具合です。<br>利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。 |- ! type | 分類名です。複数設定する場合はコンマで区切ります。<br>たとえば、<code style="color:#c00;">type:"総数,全角,カナ"</code> という具合です。<br>この場合、type["総数"], type["全角"], type["カナ"] の各変数にカウントが加算されます。 |} 「文字カウント」マクロは、この定義を上から順に見て、該当する箇所を数えます。 ==結果表示== 現在の定義は下表のとおりです。 * <b style="background:#fcc;">赤地</b> の項目は、初期状態で表示される項目です。 {|class="wikitable" ! 項目名 !! 表示例 !! 関係する分類 !! 説明 |- !style="background:#fcc;"| 総字数 | 12345 (文書全体)<br>12345 (選択範囲) | 総数 || スペースを含む文字数と、計測範囲 |- !style="background:#fcc;"| 字数 | 12345 (改行・空白抜き) | 総数−空白 || スペースを含まない文字数 |- ! 原稿 | 12~16枚 (12分)<br>123~164枚 (1.2時間) | 総数、字数 || 原稿用紙枚数(400~300字/枚)と、読了時間(400字/分) |- !style="background:#fcc;"| 改行 | 12345 (CR+LF) | 改行 || 改行の数と、改行コード |- !style="background:#fcc;"| 段落 | 12345 | 段落 || 空白行でない論理行数 |- ! 半英単 | 12345 | 半英単 || ASCII文字(半角英数)の単語数 |- !style="background:#fcc;"| 半角 | 12345 (半カナ 12345) | 半角、半カナ || 半角文字の数と、半角カナの数 |- !style="background:#fcc;"| 全角 | 12345 (依存 12345) | 全角、MS依存 || 全角文字の数と、Shift_JIS での環境依存文字の数 |- !style="background:#fcc;"| 仮名 | 12345 (12.3%/字数) | 仮名 || 仮名文字の数と、「字数」に占める割合 |- ! 漢字 | 12345 (12.3%/字数) | 漢字 || 漢字の数と、「字数」に占める割合 |- !style="background:#fcc;"| Unicode | 12345 (ペア 12345) | Uni、SP || Shift_JIS では保存できない文字の数と、サロゲートペアの数 |- !style="background:#fcc;"| サイズ | 12,345 バイト | || 現在のエンコードでの容量 |- ! UTF-16 | 12,345+2(BOM) バイト | || UTF-16 での容量 |- ! UTF-8 | 12,345+3(BOM) バイト | || UTF-8 での容量 |- ! UTF-7 | 12,345 バイト | || UTF-7 での容量 |- ! EUC | 12,345 バイト | || 日本語 (EUC) / EUC-JP (CP51932) での容量 |- ! JIS | 12,345 バイト | || 日本語 (JIS) / ISO-2022-JP (CP50222) での容量 |- ! SJIS | 12,345 バイト | || 日本語 (シフトJIS) / Shift_JIS (CP932) での容量 |} ===結果表示の仕様=== 結果表示は、ソースコードの最後あたりにある「▼結果表示」以下で定義されています。 <source lang="javascript"> //▼結果表示 /* 中略 */ Alert( ["" // ----------------- ↓ここから表示 ,"総字数\t: "+(type["総数"])+" ("+ RANGE +")" ," 字数\t: "+(type["字数"])+" (改行・空白抜き)" //," 原稿\t: "+paper(type["総数"])+" ("+time(type["字数"])+")" ," 改行\t: "+(type["改行"])+" ("+ BREAK +")" ," 段落\t: "+(type["段落"]) //,"半英単\t: "+(type["半英単"]) ," 半角\t: "+(type["半角"])+" (半カナ "+(type["半カナ"])+")" ," 全角\t: "+(type["全角"])+" (依存 "+(type["MS依存"])+")" ," 仮名\t: "+(type["仮名"])+" ("+per(type["仮名"],type["字数"])+"/字数)" //," 漢字\t: "+(type["漢字"])+" ("+per(type["漢字"],type["字数"])+"/字数)" ,"Unicode\t: "+(type["Uni"])+" (ペア "+(type["SP"])+")" ,"" ,"サイズ\t: "+(bytes())+" バイト" //,"UTF-16\t: "+(bytes("utf-16"))+"+2(BOM) バイト" //,"UTF-8 \t: "+(bytes("utf-8",-3))+"+3(BOM) バイト" //,"UTF-7 \t: "+(bytes("utf-7"))+" バイト" //,"EUC \t: "+(bytes("euc-jp"))+" バイト" //,"JIS \t: "+(bytes("iso-2022-jp"))+" バイト" //,"SJIS \t: "+(bytes("shift_jis"))+" バイト" // ----------------- ↑ここまで表示 ].join("\n").replace(/^\n+|\n+$/g,"") ); </source> {|class="wikitable" ! type[分類名] | カウント結果。たとえば「総数」に該当した数は type["総数"] で得られます。 |- ! paper(n) | 原稿用紙枚数を求める関数(1枚400~300字で概算)。<br>単純に n÷400 と n÷300(切り上げ)で算出します。 |- ! time(n) | 読了時間を求める関数(1分400字で概算)。<br>60分未満は「分」表示(切り上げ)、60分以上は「時間」表示(小数第1位まで四捨五入)です。 |- ! per(n,m) | m に占める n の割合(百分率)を求める関数。<br>10%未満は小数第2位まで切り捨て、100%未満は第1位まで切り捨て、100%以上は切り上げです。 |- ! bytes(enc) | 容量(バイト数)を求める関数。<br>enc には[[マクロリファレンス:エンコード定数|エンコード定数]] または ADODB.Stream の Charset プロパティに渡す文字列を指定します。<br>指定しない場合、現在のエンコードになります。 |} ===表示項目を増やす=== 初期状態で表示されない項目を表示するには、ソースコードの行頭の <code>//</code> を削除してください。 <source lang="javascript"> ,"サイズ\t: "+(bytes())+" バイト" //,"UTF-16\t: "+(bytes("utf-16"))+"+2(BOM) バイト" //,"UTF-8 \t: "+(bytes("utf-8",-3))+"+3(BOM) バイト" //,"UTF-7 \t: "+(bytes("utf-7"))+" バイト" //,"EUC \t: "+(bytes("euc-jp"))+" バイト" //,"JIS \t: "+(bytes("iso-2022-jp"))+" バイト" //,"SJIS \t: "+(bytes("shift_jis"))+" バイト" </source> :↓「サイズ」を非表示、「UTF-16」「UTF-8」「SJIS」を表示する場合 <source lang="javascript"> //,"サイズ\t: "+(bytes())+" バイト" ,"UTF-16\t: "+(bytes("utf-16"))+"+2(BOM) バイト" ,"UTF-8 \t: "+(bytes("utf-8",-3))+"+3(BOM) バイト" //,"UTF-7 \t: "+(bytes("utf-7"))+" バイト" //,"EUC \t: "+(bytes("euc-jp"))+" バイト" //,"JIS \t: "+(bytes("iso-2022-jp"))+" バイト" ,"SJIS \t: "+(bytes("shift_jis"))+" バイト" </source>
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク