JavaScriptで、原稿用紙の文字数(ページ数)計算をするロジックを紹介します。
はじめに
紹介するコードの文字数計算のルールは次のとおりです。
- 400字詰め(20×20)の原稿用紙の文字数で計算
- 行頭禁止文字は
」』)}】>≫、。,.
- 行末調整は「ぶら下がり」または「追い込み」の前提
サンプルコード
HTML
計算対象の文字列を入力するテキストエリアと、文字数の計算結果を表示する <p>
タグを置いておく。
<body>
<textarea id="text" oninput="calc()" rows="20" cols="60"></textarea>
<p id="result"></p>
</body>
JavaScript
次は本題の文字数を計算する JavaScriptである。
処理の流れ等は、コメントなどを見て頂きたい。
function calc() {
const LINE_CHAR_SIZE = 20; //1行あたりの文字数
const PAGE_LINE_SIZE = 20; //1ページあたりの行数
const END_KINSOKU = "」』)}】>≫、。,."; //行頭禁則文字(閉じ括弧、句読点)
let targetText = document.getElementById("text").value;
let lineCount = 0;
//計算対象の文字列を改行コードで分割したブロック単位でループ
const textBlocks = targetText.split("\n");
textBlocks.forEach(block => {
if (block.length == 0) {
//改行だけの行は行数だけカウント
lineCount++;
return;
}
let currentIndex = 0;
while (currentIndex < block.length) {
//1行分(20文字)取得
let t = block.substr(currentIndex, LINE_CHAR_SIZE);
currentIndex += LINE_CHAR_SIZE;
//行頭禁則文字の処理
while (true) {
const c = block.substr(currentIndex, 1);
if (c && END_KINSOKU.indexOf(c) >= 0) {
currentIndex++;
continue;
}
break;
}
lineCount++;
}
});
//行数から必要なページ数を計算
const pageCount = Math.ceil(lineCount / PAGE_LINE_SIZE);
//計算結果を画面に表示
document.getElementById("result").innerText =
`${lineCount}行(${pageCount}ページ)`;
}
動かしてみる
上で作成したコードを実行してみよう。
こんな感じで、テキストエリアに入力するたびにページ数や行数が計算されていればOKである。
0 件のコメント:
コメントを投稿