Ruby資料一覧

データ操作

2007/8/19更新

対応バージョン: 1.8

ASCII文字 - コード値相互変換

ASCII文字をコード値に変換するには文字列のうち1文字だけを参照すればよい。

s = "AB"

p s[0]
=> 65

p s[1]
=> 66

逆にコード値をASCII文字に変換するには以下のような方法がある。

組込み関数のsprintf、format
Integer#chrメソッド
String#%メソッド
p sprintf("%c", 65)
=> "A"

p format("%c", 66)
=> "B"

p 67.chr
=> "C"

p "%c" % 68
=> "D"

これを応用すれば、例えばExcelのセル記号(A,B,C...)を10進から変換することも簡単にできる。

def num2excel(num)
  high = num / 26               # セル番号の上位を取り出す
  row  = num % 26               # セル番号の下位を取り出す  

  if high > 0                   # セル番号が27以上の場合
    high_char = (high + 64).chr # セル番号上位を文字列に(A〜Z)
  else                          # セル番号が26以下の場合
    high_char = ""              # セル番号上位は不要
  end

  row_char = (row + 65).chr     # セル番号下位を文字列に(A〜Z)

  out = sprintf("%s%s", high_char, row_char)
                                # セル番号上位+下位を結合
  return out
end

256.times {|i|                  # Excel2003の最大セル数
  char = num2excel(i)
  puts sprintf("%03d = %s\n", i + 1, char)
}

(結果)

001 = A
002 = B
:
025 = Y
026 = Z
027 = AA
028 = AB
:
255 = IX
256 = IV

文字列をURLエンコードする

CGI.escapeを使用する。

require "cgi"

p CGI.escape("@##")

=> "%40%23%23"

11

文字列を実体参照化する

2007/8/19

1.8

HTMLやXMLの中でエスケープすべき文字「<」「>」「&」「"」については以下のように個別に実体参照化してもよいが、

line = "<エスケープすべき文字列>"

line.gsub!(/</, "&lt;");
line.gsub!(/>/, "&gt;");
line.gsub!(/&/, "&amp;");
line.gsub!(/"/, "&quot;");

CGI.escapeHTMLを使用すればもっと簡単に処理できる。

require "cgi"

p CGI.escapeHTML("<s>try & error</s>")

=> "&lt;s&gt;try &amp; error&lt;/s&gt;"