コード片

ファイル・ディレクトリ関係

File, Dir, FileTest, FileUtils, Pathname あたりを使う。

実行ファイルと同じディレクトリのファイルを読む

File.dirname(__FILE__) + "/test.txt"

ディレクトリを作成。すでにあったりして失敗したらエラー。

Dir::mkdir("/home/take/tmp")

ディレクトリ階層を一気に作成

FileUtils.mkdir_p('/usr/local/lib/ruby')

または

Pathname.new('/usr/local/lib/ruby').mkpath

ファイルかディレクトリが存在するか調べる

File.exist? 'hoge'

または

FileTest.exist? 'hoge'

正規表現

例外

rescue

p $! ## 例外の情報

p $@ ## backtrace

例外を発生させる

raise

raise "Errorrrrr!"

文字コード変換

kconvを使うとお手軽。

#!ruby -Ku

require 'kconv'

s = "表が怖い噂のソフトキタ━(゚∀゚)━ !!"

s_euc = s.toeuc

s_sjis = s.tosjis

s_utf8 = s.toutf8

s_utf16 = s.toutf16

# EUC-JP で表された 'Hello, るびま!'

str_eucjp = "\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa"

str_shiftjis = str.kconv(Kconv::SJIS, Kconv::EUC) # EUC-JP から Shift_JIS に変換

str_iso2022jp = str.kconv(Kconv::JIS, Kconv::EUC) # EUC-JP から ISO-2022-JP (JIS) に変換

str_utf8 = str.kconv(Kconv::UTF8, Kconv::EUC) # EUC-JP から UTF-8 に変換

str_utf16 = str.kconv(Kconv::UTF16, Kconv::EUC) # EUC-JP から BOM 無し UTF-16BE に変換

参考:

その他

UnixTime

Time.now.to_i # => 1294134318 とか。秒数が返ってくる。ミリ秒ではない。

Time.at(1294134318) # => Timeオブジェクト

MD5文字列(16進数を文字列で)

require 'digest/md5'

p Digest::MD5.hexdigest('abc') #=> '900150983cd24fb0d6963f7d28e17f72'

短めでランダムなID(ハッシュ値)文字列生成。16進数を36進数にする。62進数(0-9a-Z)にすればさらに短くできるけど、36進数までしかto_sできない。

Digest::MD5.hexdigest('hoge').to_i(16).to_s(36)

=> "dvnlqdltsg0oh7q2bph1oly0u"

http://subtech.g.hatena.ne.jp/secondlife/20100224/1267018963 みたいにやれば62進数もいける?

idを元に生成する場合はこんな感じ。reverseは値を散らすため。rは一番上の桁が0にならないように。

## 乱数 + 時間 + ID

def id2key(id=nil, time=nil)

id = 0 until id

time = Time.now until time

r = 1 + rand(9) ## 乱数

(r.to_s + time.utc.to_i.to_s.reverse + id.to_s).to_i.to_s(36)

end

def key2id(key)

key.to_i(36).to_s.match(/^.{11}(.+)$/)[1]

end

コマンドライン引数

$ hoge.rb abc

p ARGV[0] # ==> 'abc'