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