|
IKKI です。たびたびすみません。
もし本当に半角文字がほとんど含まれないなら、さらに速い方法があります。
# 半角文字がアンドゥバッファの量を超えると戻せなくなりますが。
[仕様]
・範囲選択時は範囲頭の論理行頭から範囲末の論理行末までカウントする
・非選択時は文書全体をカウントする
・全角文字のみカウントする(全角空白もカウントする)
・半角文字はカウントしない(タブ、改行もカウントしない)
[実行結果]
文字数:101946文字 Byte数:203892Byte 改行数:845行
38文字 × 16行 換算で191ページ(3044行)空白率:12%
20文字 × 20行 換算で273ページ(5443行)空白率:7%
時間:422 ミリ秒
#line_chars_max[0] = 38;
#lines_per_page[0] = 16;
#line_chars_max[1] = 20;
#lines_per_page[1] = 20;
#lines = 0;
#count = 0;
#line_nums[0] = 0;
#line_nums[1] = 0;
#st = tickcount;
disabledraw;
if (rectselecting) {
message "矩形選択時に文字数カウントは行なえません。";
endmacro;
} else if (!selecting) {
selectall;
}
#endl = selendlineno - (selendcolumn == 0);
begingroupundo;
replaceallfast "[\t -~]+", "", regular, inselect;
endgroupundo;
movetolineno 1, seltoplineno;
escape;
while (lineno <= #endl) {
#lines = #lines + 1;
#count = #count + linelen2 / 2;
#line_nums[0] = #line_nums[0] + (linelen2 / 2 + #line_chars_max[0] - 1) / #
line_chars_max[0];
#line_nums[1] = #line_nums[1] + (linelen2 / 2 + #line_chars_max[1] - 1) / #
line_chars_max[1];
movetolineno 1, lineno + 1;
}
#bytes = #count * 2;
undo;
escapeinselect;
enabledraw;
message $count_type + "\n" +
"文字数:" + str(#count) + "文字 " +
"Byte数:" + str(#bytes) + "Byte " +
"改行数:" + str(#lines) + "行\n" +
"\n" +
str(#line_chars_max[0]) + "文字 × " + str(#lines_per_page[0]) + "行 換算で" +
str(#line_nums[0] / #lines_per_page[0] + 1) + "ページ(" + str(#line_nums
[0]) + "行)" +
"空白率:" + str(100 - (100 * #count / #line_chars_max[0] / #line_nums[0]))
+ "%\n" +
str(#line_chars_max[1]) + "文字 × " + str(#lines_per_page[1]) + "行 換算で" +
str(#line_nums[1] / #lines_per_page[1] + 1) + "ページ(" + str(#line_nums
[1]) + "行)" +
"空白率:" + str(100 - (100 * #count / #line_chars_max[1] / #line_nums[1]))
+ "%\n" +
"時間:" + str(tickcount - #st) + " ミリ秒";
|
|