2018年11月30日 (金)

素因数分解

/* prime factorization */
var factorize = function(n) {
  var i = 2, r = [];
  while (n > i) {
    if (n % i == 0) {
      r.push(i);
      n /= i;
    } else {
      i > 2 ? i += 2 : i++;
    }
  }
  if (n > 0) r.push(n);
  return r; 
};

| | コメント (0)

2018年9月 5日 (水)

trim 系の関数定義

(function() {

  var _1 = function(char_mask) {
    return char_mask.replace(/([\\\-\^\.\[\]])/g, "\\$1");
  };

  /* 文字列の最初から空白(もしくはその他の文字)を取り除く */
  if (!String.prototype.ltrim) {
    String.prototype.ltrim = function(char_mask) {
      if ('string' == typeof char_mask && char_mask.length > 0) {
        var reg = new RegExp('^[' + _1(char_mask) + ']+');
        return this.replace(reg, '');
      }
      return this.replace(/^\s+/, '');
    };
  }

  /* 文字列の最後から空白(もしくはその他の文字)を取り除く */
  if (!String.prototype.rtrim) {
    String.prototype.rtrim = function(char_mask) {
      if ('string' == typeof char_mask && char_mask.length > 0) {
        var reg = new RegExp('[' + _1(char_mask) + ']+$');
        return this.replace(reg, '');
      }
      return this.replace(/\s+$/, '');
    };
  }

  /* 文字列の先頭および末尾にある空白(もしくはその他の文字)を取り除く */
  if (!String.prototype.trim_ex) {
    String.prototype.trim_ex = function(char_mask) {
      return this.ltrim(char_mask).rtrim(char_mask);
    };
  }

})();

| | コメント (0)

2018年8月22日 (水)

TSV 操作のひな型

use utf8;
use Text::CSV_XS;
use Encode;

binmode STDOUT, ':encoding(cp932)';

sub ucwords {
  $str = shift;
  $str = lc($str);
  $str =~ s/\b(\w)/\u$1/g;
  return $str;
}

# UTF-8 で日本語ファイル名を扱う
my $file = encode('cp932', 'サンプル.txt');
my $out = encode('cp932', '出力.txt');

my $csv = Text::CSV_XS->new({sep_char => "\t", binary => 1});
open my $fhi, "<:encoding(cp932)", $file;
open my $fho, ">:encoding(cp932)", $out;

while (my $row = $csv->getline($fhi)) {
  my @flds = @$row;
  splice(@flds, 30);
  for (my $i = 0; $i < @flds; $i++) {
    # 改行削除
    $flds[$i] =~ s/[\r\n]//g;
    # 空白の統一
    $flds[$i] =~ s/[\x{3000}\s]+/ /g;
    # 行頭行末スペース削除
    $flds[$i] =~ s/^\s+|\s+$//g;
    # 桁区切りの削除
    $flds[$i] =~ s/,//g if ($flds[$i] =~ /^[\d,]+$/);
    # 各単語の最初の文字を大文字にする
    $flds[$i] = &ucwords($flds[$i]) if ($flds[$i] =~ /^[A-Z]+$/);
  }
  print $fho join("\t", @flds),"\n" if ($flds[0]);
}
$csv->eof or $csv->error_diag;

close $fho;
close $fhi;

| | コメント (0)

2018年8月17日 (金)

htmlspecialchars(別版)

var htmlspecialchars = function(s) {
  var e = document.createElement('span');
  e.textContent = s;
  return e.innerHTML
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#039;');
};

var htmlspecialchars_decode = function(s) {
  var e = document.createElement('span');
  e.innerHTML = s;
  return e.textContent;
};

| | コメント (0)

2018年8月 2日 (木)

数値選択

jQuery(function($) {
  $.fn.setNumOptions = function(from_val, to_val, val) {
    var s = '(選択してください)';
    this.each(function() {
      if (this.nodeName === 'SELECT') {
        $(this).empty()
          .append('<option value="">' + s + '</option>');
        for (var i = from_val; i <= to_val; i++) {
          $(this).append(
            '<option value="' + i + '"' +
            (val != null && val === i ? ' selected' : '') +
            '>' + i + '</option>'
          );
        }
      }
    });
  };
  /* usage example */
  $('select#s1').setNumOptions(1, 12, 8);
});

| | コメント (0)

«都道府県選択