原稿用紙かうんたぁ
入力した文字列の長さを原稿用紙換算で計算。
目次に戻る

2012/05/20 修正しました;
● 設置例
× 横 原稿用紙 文庫(電撃)

 

入力した文字列の長さを原稿用紙換算で計算します。禁則処理も微妙にフォロー。
上のテキストボックスにご希望の縦横サイズを入力し、計算ボタンで文字数・行数・枚数を計算。
出力ボタンでそのサイズに改行したテキストを出力します。
文字数によってはちょっと重いかもしれませんので気をつけてください(特に出力)。

●ソース
1・JavaScript
<!--
function main(flg){
	bunsho=document.genko.screen.value;
	tate=document.genko.tate.value-0;
	yoko=document.genko.yoko.value-0;

	if(flg==1){
		kekka4="<tt>"+outstr(bunsho, tate)+"</tt>";

		document.write(tate+" × "+yoko);
		document.write("<br><br>"+kekka4);
	}
	else{
		kekka1=cntmoji(bunsho);
		kekka2=cntline(bunsho, tate);
		kekka3=cntpage(kekka2, yoko);

		rtn="文字数"+kekka1;
		rtn=rtn+"\n行数"+kekka2;
		rtn=rtn+"\n枚数"+kekka3;

		alert(rtn);
	}
}

/////////文字数を数える///////////////////////////
//戻り値:文字数
//////////////////////////////////////////////////
function cntmoji(str){
	crlf=0;
	cnt=0;

	str=str.replace(/\r\n/ig,"\n");
	len=str.length;
	cnt=str.split("\n").length-1;
	len=len-cnt;
	return len;
}

////////ページ数を数える//////////////////////////
//cntlineを横行数で割る
//戻り値;○枚と△行
//////////////////////////////////////////////////
function cntpage(gyou, yoko){
	amari=gyou%yoko;
	pagesu=(gyou-amari)/yoko;
	mes=pagesu+"枚と"+amari+"行";
	return mes;
}

////////行数を数える//////////////////////////////
//outstrの戻り値の改行数を数える
//戻り値:トータル行数
//////////////////////////////////////////////////
function cntline(str, tate){
	strtmp=outstr(str, tate);
	cnt=strtmp.split("\n").length-1;
	return cnt;
}


////////改行した文字列出力////////////////////////
//戻り値:改行した文字列
//////////////////////////////////////////////////
function outstr(str, tate){
	thisstr="";	//今調べ中の文字列
	cursor=0;	//カーソル(thisstrの先頭)
	rtnstr="";	//原稿用紙サイズで折り返した文字列

	str=str.replace(/\r\n/ig,"\n");
	strary=str.split("\n");		//改行ごとに分ける

	for(i=0;i<strary.length;i++){
		cursor=0;
		while(cursor<=strary[i].length){
			thisstr=strary[i].substr(cursor, tate);

			while(1){
				nextstr=strary[i].substr(cursor+tate, 1);
		
				//禁則処理
				if(nextstr=="」"
				|| nextstr==")"
				|| nextstr=="』"
				|| nextstr=="》"
				|| nextstr=="】"
				|| nextstr=="。"
				|| nextstr=="、"){
					thisstr=thisstr + nextstr;
					cursor++;
				}else{
					break;
				}
			}
			if(thisstr!="" || cursor==0){
				rtnstr=rtnstr+thisstr+"<br>\n";
			}
			cursor=cursor+tate;
		}
	}
	return rtnstr;
}

////////文字数カウンタ切り替え///////////////////////////
function ChangeAry(n){
	switch(n){
	case 0:	document.genko.tate.value=20;
		document.genko.yoko.value=20;
		break;
	case 1:	document.genko.tate.value=42;
		document.genko.yoko.value=17;
		break;
	}
}
//-->


2・フォーム

<form name="genko">
縦<input type="text" name="tate" size="4" value=20>
×
横<input type="text" name="yoko" size="4" value=20>
<input type="radio" name="ary" onClick="ChangeAry(0)" value=true>原稿用紙
<input type="radio" name="ary" onClick="ChangeAry(1)">文庫(電撃)
<BR>
<textarea name="screen" cols="50" rows="7">
</textarea>
<BR>
<input type="button" value="計算" onClick="main()">
<input type="button" value="出力" onClick="main(1)">
 <input type="reset" value="クリア">
</form>

●設置方法
上記の1・JavaScriptをHTMLソース内<head>〜</head>に、
2・フォームを<body>〜</body>に貼り付けてください。


目次に戻る