프로그램/Javascript

sprintf, printf 구현하기

네오류이 2021. 1. 15. 09:20
728x90
반응형

오늘은 자바스크립트에서 C++에서 처럼 sprintf 나 print 을 구현해 보겠습니다.

 

자바스크립트에서는 이런 기능이 없어서 직접 구현을 해주어야 합니다.

 

이런 부분이꼭 필요한 부분이죠~

 

* 소스코드

 

 

String.prototype.repeat = function(n) {

  var sRet = "";

  for (var i = 0; i < n; i++) sRet += this;

  return sRet;

}

 

String.prototype.format = function(/* ... */) {

 

  var args = arguments;

  var idx = 0;

 

  return this.replace(/%(-?)([0-9]*\.?[0-9]*)([s|f|d|x|X|o])/g, function(all, sign, format, type) {

 

    var arg;

    var prefix = format.charAt(0);

 

    format = format.split(/\./);

 

    format[0] = parseInt(format[0], 10) || 0;

    format[1] = format[1] === undefined ? NaN : parseInt(format[1], 10) || 0;

 

    if (type == 's') {

      arg = isNaN(format[1]) ? args[idx] : args[idx].substr(0, format[1]);

    } else {

 

      if (type == 'f') {

        arg = (format[1] === 0 ? parseInt(args[idx], 10) : parseFloat(args[idx])).toString();

        if (!isNaN(format[1])) arg = arg.replace(RegExp('(\\.[0-9]{' + format[1] + '})[0-9]*'), '$1');

      } else if (type == 'd') {

        arg = parseInt(args[idx], 10).toString();

      } else if (type == 'x') {

        arg = parseInt(args[idx], 10).toString(16).toLowerCase();

      } else if (type == 'X') {

        arg = parseInt(args[idx], 10).toString(16).toUpperCase();

      } else if (type == 'o') {

        arg = parseInt(args[idx], 10).toString(8);

      }

 

      if (prefix == '0')  arg = '0'.repeat(format[0] - arg.length) + arg;

 

    }

 

    if (sign == '-') {

      arg += ' '.repeat(format[0] - arg.length);

    } else {

      arg = ' '.repeat(format[0] - arg.length) + arg;

    }

 

format = null;

 

    idx++;

    return arg;

 

  }).replace(/%%/g, '%');

 

}

 

* 사용법

 

var aa = "%04d".format( "123" );    // 0123

var aa = "%3s".format( "a" );    // [a  ]

 

기존의 c++에서 쓰는 느낌과 조금 틀리지만 사용하는데는 크게 문제가 없네요.

 

그럼 많이많이 사용해 주세요..^^

 

 

#printf#sprintf#구현#자바스크립트#함수

728x90
반응형