一番の下手くそでいよう、とはいうものの・・・・・・
最近、仕事でのちょっとしたテキスト処理やデータをまとめたりする際に、
Rubyを使うようになりました。
以前はPerlを使っていたのですが、Rubyの方が読み易くて書くのも楽。
そこでさらに Ruby についてもっと深く知っていきたいなーなどと思っていたところ、
ATNDの新着RSSにyokohama.rb というイベントを発見。
初心者向けセミナーがあるということで、そちらに参加してきました。
yokohama.rb 第3回
http://atnd.org/events/10272
初心者向けセミナーの内容はオライリーの「初めてのRuby」を読むというもの。
で今回は主に2章の「配列とハッシュ」。
ここでセミナーの内容をちょっと復習。
配列の定義。
a = ["a","ab","abcde"] => ["a", "ab", "abcde"] a = %w(a ab abcde) => ["a", "ab", "abcde"]
配列から最大の長さを探す。
a.max {|e1,e2| e1.size <=> e2.size}.size => 6 a.map {|e| e.size}.max => 6
map を使うと、配列の各要素に対する処理が実行されたあとの配列が帰ってくる。
各配列の要素を右揃えで表示。
a = ["a","ab","abcedf"] l = a.map {|e| e.size}.max puts "sprintf" a.each do |e| puts sprintf("%06s",e) end puts "rjust" a.each do |e| puts e.rjust(l) end
yield を使って、Array オブジェクトに myeach を作る。
class Array def myeach self.length.times do |e| yield self[e] end end def myeach2 i = 0 while (i < self.length) yield self[i] i += 1 end end end ["a","ab","abcdef"].myeach {|e| puts sprintf("%6s",e)} ["a","ab","abcdef"].myeach2 {|e| puts sprintf("%6s",e)}
さらに、Ruby1.9.2 の文字コードの勉強
・Ruby1.9 の文字列自体が文字コードを持つ
・ 外部エンコード:読み込むファイルの文字コード
・ 内部エンコード:読み込み後の文字コード
Ruby1.9では、スクリプト自体の文字コード、読み込むファイルの文字コード、
書きだすファイルの文字コードを別々にできる。
# -*- coding:utf-8 -*- #スクリプト自体の文字コードはUTF-8、 #読むこむファイルはEUC-JP、書き出しはUTF-8 File.open("test.txt","r:EUC-JP:Shift_JIS"){|f| File.open("out.txt","w:Shift_JIS:Shift_JIS") {|fo| fo.puts(f.read) } }
以前、Windowsアプリのログファイルで日本語入りのUnicodeになっているファイルがあり、
これをRuby1.8ではうまく読めない、なんてことを経験したことがありました。
その時はPerlで読み込んでいたのですが、Ruby1.9ならうまくいきそう。
RVM (Ruby Version Manager)は複数のRubyを管理するバージョン管理ツール。
このRVMを使って、Macbook AirにRuby1.8.7とRuby1.9.2を共存。
$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ rvm use 1.9.2
Using /Users/hayato/.rvm/gems/ruby-1.9.2-p0
$ ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.5.0]#リセット
$ rvm reset
$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
などなど、非常に勉強になりました。
感想:
何と言うか、初心者向けということで行ってみたら、本当の初心者は自分だけだったという。。
職業プログラマではない上、Rubyもあまり書き慣れてないので、
こういうコードを書いて勉強するイベントに参加するには、
もうちょっと普段からRubyのコードを書いておいて方が良いと感じた。
「一番の下手くそでいよう」とはいうものの、さすがに素人すぎるのもまずいなー、と。
勉強用のブログでも作ろうかな。