Ruby‎ > ‎

コード片

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

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'

Comments