私のサイトで公開している
JScriptバッチ処理用ライブラリのバージョン「20130825」を公開しました。

主な内容は、JavaのString.formatを、JScriptでも使用できるようにするというものです。
JavaのString.formatは、大体はCのsprintfと似ているのですが、もっといろいろできます。
ただ、今回JScriptで使用できるようにしたString.formatは、Cのsprintfを似せて作りました。

コードを作成するに当たっては、
正規表現を使ってすっきり書くけど、分かりやすいコードを心がけて作りました。
String.formatの定義だけ抜き出せば、JavaScriptでも使用できるように作りました。
速度は、恐らく遅いと思いますが、最近のパソコンなら関係ないと思います。


ライブラリを使用した場合次のコードで

function main(args) {

	System.out.println("String.format のサンプル");
	
	var format = [
		"",
		" ",
		"+",
		"2",
		"10",
		".2",
		".10",
		"-16",
		" 16",
		"016",
		"#16",
		"#16.",
		"#-+16.",
		"#16.4"
	];
	
	System.out.println("動作例");
	for(var i = 0;i < format.length; i++) {
		var x = 10;
		// 整数10進数
		System.out.println(String.format("%%" + format[i] + "d [%" + format[i] + "d]", x));
		// 整数2進数
		System.out.println(String.format("%%" + format[i] + "b [%" + format[i] + "b]", x));
		System.out.println(String.format("%%" + format[i] + "B [%" + format[i] + "B]", x));
		// 整数8進数
		System.out.println(String.format("%%" + format[i] + "o [%" + format[i] + "o]", x));
		// 整数16進数
		System.out.println(String.format("%%" + format[i] + "x [%" + format[i] + "x]", x));
		System.out.println(String.format("%%" + format[i] + "X [%" + format[i] + "X]", x));
		// 小数形式浮動小数点数
		System.out.println(String.format("%%" + format[i] + "f [%" + format[i] + "f]", x));
		// 指数形式浮動小数点数
		System.out.println(String.format("%%" + format[i] + "e [%" + format[i] + "e]", x));
		System.out.println(String.format("%%" + format[i] + "E [%" + format[i] + "E]", x));
		// fかeで適した方
		System.out.println(String.format("%%" + format[i] + "g [%" + format[i] + "g]", x));
		System.out.println(String.format("%%" + format[i] + "G [%" + format[i] + "G]", x));
		// 文字
		System.out.println(String.format("%%" + format[i] + "c [%" + format[i] + "c]", "A".charCodeAt(0)));
		// 文字列
		System.out.println(String.format("%%" + format[i] + "s [%" + format[i] + "s]", "ABCDEFG"));
	}

	System.out.println("引数順指定");
	System.out.println(String.format("%%1$d %%2$d %%3$d [%1$d %2$d %3$d]" ,1 ,2 ,3 ));
	System.out.println(String.format("%%3$d %%2$d %%1$d [%3$d %2$d %1$d]" ,1 ,2 ,3 ));

	System.out.println("引数によるフィールド幅指定");
	for(var i = 1;i < 10; i++) {
		var x = 1;
		System.out.println(String.format("%%*d(" + i + ") [%*d]" ,i ,x ));
	}

	System.out.println("引数による精度指定(実数)");
	for(var i = 1;i < 10; i++) {
		var x = 1;
		System.out.println(String.format("%%.*f(" + i + ") [%.*f]" ,i ,x ));
	}

	System.out.println("引数による精度指定(文字列)");
	for(var i = 1;i < 10; i++) {
		var x = "ABCDEFGHIJKLMN";
		System.out.println(String.format("%%.*s(" + i + ") [%.*s]" ,i ,x ));
	}

	System.out.println("組合せ");
	for(var i = 1;i < 10; i++) {
		var x = 1;
		System.out.println(String.format("%%*.*f(" + i + ") [%*.*f]" ,i * 2 ,i ,x ));
	}

	System.out.println("動作例(マイナスの数字)");
	for(var i = 0;i < format.length; i++) {
		var x = -10;
		// 整数10進数
		System.out.println(String.format("%%" + format[i] + "d [%" + format[i] + "d]", x));
		System.out.println(String.format("%%" + format[i] + "u [%" + format[i] + "u]", x));
		// 整数2進数
		System.out.println(String.format("%%" + format[i] + "b [%" + format[i] + "b]", x));
		System.out.println(String.format("%%" + format[i] + "B [%" + format[i] + "B]", x));
		// 整数8進数
		System.out.println(String.format("%%" + format[i] + "o [%" + format[i] + "o]", x));
		// 整数16進数
		System.out.println(String.format("%%" + format[i] + "x [%" + format[i] + "x]", x));
		System.out.println(String.format("%%" + format[i] + "X [%" + format[i] + "X]", x));
		// 小数形式浮動小数点数
		System.out.println(String.format("%%" + format[i] + "f [%" + format[i] + "f]", x));
		// 指数形式浮動小数点数
		System.out.println(String.format("%%" + format[i] + "e [%" + format[i] + "e]", x));
		System.out.println(String.format("%%" + format[i] + "E [%" + format[i] + "E]", x));
		// fかeで適した方
		System.out.println(String.format("%%" + format[i] + "g [%" + format[i] + "g]", x));
		System.out.println(String.format("%%" + format[i] + "G [%" + format[i] + "G]", x));
	}

	System.stop();

}

結果はこうなります。

String.format のサンプル
動作例
%d [10]
%b [1010]
%B [1010]
%o [12]
%x [a]
%X [A]
%f [10.000000]
%e [1.000000e+001]
%E [1.000000E+001]
%g [10]
%G [10]
%c [A]
%s [ABCDEFG]
% d [ 10]
% b [ 1010]
% B [ 1010]
% o [ 12]
% x [ a]
% X [ A]
% f [ 10.000000]
% e [ 1.000000e+001]
% E [ 1.000000E+001]
% g [ 10]
% G [ 10]
% c [A]
% s [ABCDEFG]
%+d [+10]
%+b [+1010]
%+B [+1010]
%+o [+12]
%+x [+a]
%+X [+A]
%+f [+10.000000]
%+e [+1.000000e+001]
%+E [+1.000000E+001]
%+g [+10]
%+G [+10]
%+c [A]
%+s [ABCDEFG]
%2d [10]
%2b [1010]
%2B [1010]
%2o [12]
%2x [ a]
%2X [ A]
%2f [10.000000]
%2e [1.000000e+001]
%2E [1.000000E+001]
%2g [10]
%2G [10]
%2c [ A]
%2s [ABCDEFG]
%10d [		10]
%10b [	  1010]
%10B [	  1010]
%10o [		12]
%10x [		 a]
%10X [		 A]
%10f [ 10.000000]
%10e [1.000000e+001]
%10E [1.000000E+001]
%10g [		10]
%10G [		10]
%10c [		 A]
%10s [   ABCDEFG]
%.2d [10]
%.2b [1010]
%.2B [1010]
%.2o [12]
%.2x [0a]
%.2X [0A]
%.2f [10.00]
%.2e [1.00e+001]
%.2E [1.00E+001]
%.2g [10]
%.2G [10]
%.2c [A]
%.2s [AB]
%.10d [0000000010]
%.10b [0000001010]
%.10B [0000001010]
%.10o [0000000012]
%.10x [000000000a]
%.10X [000000000A]
%.10f [10.0000000000]
%.10e [1.0000000000e+001]
%.10E [1.0000000000E+001]
%.10g [10]
%.10G [10]
%.10c [A]
%.10s [ABCDEFG]
%-16d [10			  ]
%-16b [1010			]
%-16B [1010			]
%-16o [12			  ]
%-16x [a			   ]
%-16X [A			   ]
%-16f [10.000000	   ]
%-16e [1.000000e+001   ]
%-16E [1.000000E+001   ]
%-16g [10			  ]
%-16G [10			  ]
%-16c [A			   ]
%-16s [ABCDEFG		 ]
% 16d [			  10]
% 16b [			1010]
% 16B [			1010]
% 16o [			  12]
% 16x [			   a]
% 16X [			   A]
% 16f [	   10.000000]
% 16e [   1.000000e+001]
% 16E [   1.000000E+001]
% 16g [			  10]
% 16G [			  10]
% 16c [			   A]
% 16s [		 ABCDEFG]
%016d [0000000000000010]
%016b [0000000000001010]
%016B [0000000000001010]
%016o [0000000000000012]
%016x [000000000000000a]
%016X [000000000000000A]
%016f [000000010.000000]
%016e [0001.000000e+001]
%016E [0001.000000E+001]
%016g [0000000000000010]
%016G [0000000000000010]
%016c [			   A]
%016s [		 ABCDEFG]
%#16d [			  10]
%#16b [		  0b1010]
%#16B [		  0B1010]
%#16o [			 012]
%#16x [			 0xa]
%#16X [			 0XA]
%#16f [	   10.000000]
%#16e [   1.000000e+001]
%#16E [   1.000000E+001]
%#16g [		 10.0000]
%#16G [		 10.0000]
%#16c [			   A]
%#16s [		 ABCDEFG]
%#16.d [			  10]
%#16.b [		  0b1010]
%#16.B [		  0B1010]
%#16.o [			 012]
%#16.x [			 0xa]
%#16.X [			 0XA]
%#16.f [			 10.]
%#16.e [		 1.e+001]
%#16.E [		 1.E+001]
%#16.g [		 1.e+001]
%#16.G [		 1.E+001]
%#16.c [				]
%#16.s [				]
%#-+16.d [+10			 ]
%#-+16.b [+0b1010		 ]
%#-+16.B [+0B1010		 ]
%#-+16.o [+012			]
%#-+16.x [+0xa			]
%#-+16.X [+0XA			]
%#-+16.f [+10.			]
%#-+16.e [+1.e+001		]
%#-+16.E [+1.E+001		]
%#-+16.g [+1.e+001		]
%#-+16.G [+1.E+001		]
%#-+16.c [				]
%#-+16.s [				]
%#16.4d [			0010]
%#16.4b [		  0b1010]
%#16.4B [		  0B1010]
%#16.4o [		   00012]
%#16.4x [		  0x000a]
%#16.4X [		  0X000A]
%#16.4f [		 10.0000]
%#16.4e [	 1.0000e+001]
%#16.4E [	 1.0000E+001]
%#16.4g [		   10.00]
%#16.4G [		   10.00]
%#16.4c [			   A]
%#16.4s [			ABCD]
引数順指定
%1$d %2$d %3$d [1 2 3]
%3$d %2$d %1$d [3 2 1]
引数によるフィールド幅指定
%*d(1) [1]
%*d(2) [ 1]
%*d(3) [  1]
%*d(4) [   1]
%*d(5) [	1]
%*d(6) [	 1]
%*d(7) [	  1]
%*d(8) [	   1]
%*d(9) [		1]
引数による精度指定(実数)
%.*f(1) [1.0]
%.*f(2) [1.00]
%.*f(3) [1.000]
%.*f(4) [1.0000]
%.*f(5) [1.00000]
%.*f(6) [1.000000]
%.*f(7) [1.0000000]
%.*f(8) [1.00000000]
%.*f(9) [1.000000000]
引数による精度指定(文字列)
%.*s(1) [A]
%.*s(2) [AB]
%.*s(3) [ABC]
%.*s(4) [ABCD]
%.*s(5) [ABCDE]
%.*s(6) [ABCDEF]
%.*s(7) [ABCDEFG]
%.*s(8) [ABCDEFGH]
%.*s(9) [ABCDEFGHI]
組合せ
%*.*f(1) [1.0]
%*.*f(2) [1.00]
%*.*f(3) [ 1.000]
%*.*f(4) [  1.0000]
%*.*f(5) [   1.00000]
%*.*f(6) [	1.000000]
%*.*f(7) [	 1.0000000]
%*.*f(8) [	  1.00000000]
%*.*f(9) [	   1.000000000]
動作例(マイナスの数字)
%d [-10]
%u [4294967286]
%b [11111111111111111111111111110110]
%B [11111111111111111111111111110110]
%o [37777777766]
%x [fffffff6]
%X [FFFFFFF6]
%f [-10.000000]
%e [-1.000000e+001]
%E [-1.000000E+001]
%g [-10]
%G [-10]
% d [-10]
% u [ 4294967286]
% b [ 11111111111111111111111111110110]
% B [ 11111111111111111111111111110110]
% o [ 37777777766]
% x [ fffffff6]
% X [ FFFFFFF6]
% f [-10.000000]
% e [-1.000000e+001]
% E [-1.000000E+001]
% g [-10]
% G [-10]
%+d [-10]
%+u [+4294967286]
%+b [+11111111111111111111111111110110]
%+B [+11111111111111111111111111110110]
%+o [+37777777766]
%+x [+fffffff6]
%+X [+FFFFFFF6]
%+f [-10.000000]
%+e [-1.000000e+001]
%+E [-1.000000E+001]
%+g [-10]
%+G [-10]
%2d [-10]
%2u [4294967286]
%2b [11111111111111111111111111110110]
%2B [11111111111111111111111111110110]
%2o [37777777766]
%2x [fffffff6]
%2X [FFFFFFF6]
%2f [-10.000000]
%2e [-1.000000e+001]
%2E [-1.000000E+001]
%2g [-10]
%2G [-10]
%10d [	   -10]
%10u [4294967286]
%10b [11111111111111111111111111110110]
%10B [11111111111111111111111111110110]
%10o [37777777766]
%10x [  fffffff6]
%10X [  FFFFFFF6]
%10f [-10.000000]
%10e [-1.000000e+001]
%10E [-1.000000E+001]
%10g [	   -10]
%10G [	   -10]
%.2d [-10]
%.2u [4294967286]
%.2b [11111111111111111111111111110110]
%.2B [11111111111111111111111111110110]
%.2o [37777777766]
%.2x [fffffff6]
%.2X [FFFFFFF6]
%.2f [-10.00]
%.2e [-1.00e+001]
%.2E [-1.00E+001]
%.2g [-10]
%.2G [-10]
%.10d [-0000000010]
%.10u [4294967286]
%.10b [11111111111111111111111111110110]
%.10B [11111111111111111111111111110110]
%.10o [37777777766]
%.10x [00fffffff6]
%.10X [00FFFFFFF6]
%.10f [-10.0000000000]
%.10e [-1.0000000000e+001]
%.10E [-1.0000000000E+001]
%.10g [-10]
%.10G [-10]
%-16d [-10			 ]
%-16u [4294967286	  ]
%-16b [11111111111111111111111111110110]
%-16B [11111111111111111111111111110110]
%-16o [37777777766	 ]
%-16x [fffffff6		]
%-16X [FFFFFFF6		]
%-16f [-10.000000	  ]
%-16e [-1.000000e+001  ]
%-16E [-1.000000E+001  ]
%-16g [-10			 ]
%-16G [-10			 ]
% 16d [			 -10]
% 16u [	  4294967286]
% 16b [ 11111111111111111111111111110110]
% 16B [ 11111111111111111111111111110110]
% 16o [	 37777777766]
% 16x [		fffffff6]
% 16X [		FFFFFFF6]
% 16f [	  -10.000000]
% 16e [  -1.000000e+001]
% 16E [  -1.000000E+001]
% 16g [			 -10]
% 16G [			 -10]
%016d [-000000000000010]
%016u [0000004294967286]
%016b [11111111111111111111111111110110]
%016B [11111111111111111111111111110110]
%016o [0000037777777766]
%016x [00000000fffffff6]
%016X [00000000FFFFFFF6]
%016f [-00000010.000000]
%016e [-001.000000e+001]
%016E [-001.000000E+001]
%016g [-000000000000010]
%016G [-000000000000010]
%#16d [			 -10]
%#16u [	  4294967286]
%#16b [0b11111111111111111111111111110110]
%#16B [0B11111111111111111111111111110110]
%#16o [	037777777766]
%#16x [	  0xfffffff6]
%#16X [	  0XFFFFFFF6]
%#16f [	  -10.000000]
%#16e [  -1.000000e+001]
%#16E [  -1.000000E+001]
%#16g [		-10.0000]
%#16G [		-10.0000]
%#16.d [			 -10]
%#16.u [	  4294967286]
%#16.b [0b11111111111111111111111111110110]
%#16.B [0B11111111111111111111111111110110]
%#16.o [	037777777766]
%#16.x [	  0xfffffff6]
%#16.X [	  0XFFFFFFF6]
%#16.f [			-10.]
%#16.e [		-1.e+001]
%#16.E [		-1.E+001]
%#16.g [		-1.e+001]
%#16.G [		-1.E+001]
%#-+16.d [-10			 ]
%#-+16.u [+4294967286	 ]
%#-+16.b [+0b11111111111111111111111111110110]
%#-+16.B [+0B11111111111111111111111111110110]
%#-+16.o [+037777777766   ]
%#-+16.x [+0xfffffff6	 ]
%#-+16.X [+0XFFFFFFF6	 ]
%#-+16.f [-10.			]
%#-+16.e [-1.e+001		]
%#-+16.E [-1.E+001		]
%#-+16.g [-1.e+001		]
%#-+16.G [-1.E+001		]
%#16.4d [		   -0010]
%#16.4u [	  4294967286]
%#16.4b [0b11111111111111111111111111110110]
%#16.4B [0B11111111111111111111111111110110]
%#16.4o [	037777777766]
%#16.4x [	  0xfffffff6]
%#16.4X [	  0XFFFFFFF6]
%#16.4f [		-10.0000]
%#16.4e [	-1.0000e+001]
%#16.4E [	-1.0000E+001]
%#16.4g [		  -10.00]
%#16.4G [		  -10.00]

関連記事

  • 指定した範囲の乱数を作成したい(後編)指定した範囲の乱数を作成したい(後編) みなさん、こんにちは。 今日は、昨日の続き、「指定した範囲の乱数を作りたい」を続きに話していきたいと思います。 というか、解答編みたいな感じです。 指定した範囲の乱数を作成したい(前編) 指定した範囲の乱数を作成したい(後編)←いまここっ! 指定した範囲の乱数を作成したい(実戦編) ・ それでは、ちょっとおさらいをしながら進めていきます。 今回は、 […] Posted in アルゴリズム
  • 指定した範囲の乱数を作成したい(前編)指定した範囲の乱数を作成したい(前編) みなさん。 指定した範囲の乱数を作りたい場合は、どうしているでしょうか。 今日は、指定した範囲の乱数生成の小ネタを紹介します。 指定した範囲の乱数を作成したい(前編)←いまここっ! 指定した範囲の乱数を作成したい(後編) 指定した範囲の乱数を作成したい(実戦編) ・ さて、例えばサイコロを作りたいと思います。 サイコロの目は1~6ですね。 そして乱数生成器が用意されてい […] Posted in アルゴリズム
  • 指定した範囲の乱数を作成したい(実戦編)指定した範囲の乱数を作成したい(実戦編) みなさん、こんにちは。 さて、前回、前々回にわたって、 指定した範囲の乱数の作成の仕方を書きました。 改めて奥が深いですね。 読み忘れた方のためにリンクしますっ(^o^) 指定した範囲の乱数を作成したい(前編) 指定した範囲の乱数を作成したい(後編) 指定した範囲の乱数を作成したい(実戦編)←いまここっ! これまでの話では、 小さなより精度が […] Posted in アルゴリズム
  • L-03E の SSID を日本語で設定するL-03E の SSID を日本語で設定する LTE対応のポケットwifi L-03Eで日本語のSSIDを利用できるように、JavaScriptを書きました。 インストールすると、L-03E で日本語が設定できるようになります。 UTF-8対応のiPhone、iPod […] Posted in プログラミング
  • C言語のアドレス演算子の不思議C言語のアドレス演算子の不思議 前々から、C言語のポインタで不思議だったこと。 最適化C 言語 […] Posted in プログラミング
  • セカンドライフでプログラム1(書き方がC言語に似ているよ編)セカンドライフでプログラム1(書き方がC言語に似ているよ編) コンニチハ。 最近、セカンドライフやりだした。なたでです。 たぶん以前やったのが、 今から6年前の2008年5月の「ネトゲ日記-1」ですね。 で、なぜやりだしたかというと、 前々からVRに興味があるという話をしていたと思いますが、 次世代HMD?である話題もちきりの「Occlusion […] Posted in セカンドライフ制作
  • Linuxで動作するCプログラムのデバッグ環境構築2Linuxで動作するCプログラムのデバッグ環境構築2 前回の「Linuxで動作するCプログラムのデバッグ環境構築1」から引き続きます。 今回は、Eclipseを使って、Cのプロジェクトを作ってコンパイルしてみるところまで行ってみたいと思います。 では、さっそく解説をはじめます。 今回は図をふんだんに使って分かりやすく説明します! プロジェクトを作成しよう 1 Eclipseを開きましたら、左のプロジェクトの部分で右クリッ […] Posted in Linux
  • C言語の行のコメントアウト方法についてC言語の行のコメントアウト方法について 大学のプログラミングで前期から宿題を提出したりしているのですが、 後期から C での提出では、コメントアウトに行コメントの // 使っていまして、 これが、良く調べたらまずかったかもしれない。 前期はちゃんと、ブロックコメントの /* 使っていたんですけどね。 なぜ問題があるかというと、 C の ANSI […] Posted in プログラミング
  • Linuxで動作するCプログラムのデバッグ環境構築1Linuxで動作するCプログラムのデバッグ環境構築1 こんにちはー! 今回は、Linuxで動作するCのデバッグ環境の整え方をお話しします。 皆さんは、Raspberry PiとかのLinux上で動作するプログラムを作るときにどうしていますか、 Raspberry Pi 上で make […] Posted in Linux
  • 麻雀の待ち判定問題 part1麻雀の待ち判定問題 part1 昨晩は、話題の「あなたのスキルで飯は食えるか? 史上最大のコーディングスキル判定」をやってました。 意外に時間がかかって大変でした。 こんな時期にやるんじゃなかった。眠たい。(p_-) 正直3時間ちょっとかかってしまいました。 テンパイ(1113335558888)とチートイツ判定なしです。 以下は、作った後の感想です。 3時間が短いと感じまし […] Posted in アルゴリズム