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!(/</, "<"); line.gsub!(/>/, ">"); line.gsub!(/&/, "&"); line.gsub!(/"/, """);
CGI.escapeHTMLを使用すればもっと簡単に処理できる。
require "cgi"
p CGI.escapeHTML("<s>try & error</s>")
=> "<s>try & error</s>"