コード片
ファイル・ディレクトリ関係
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'