JScript

JScriptバッチ処理用ライブラリ 20130825公開

投稿日: 更新日:


私のサイトで公開している
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]