東京にまさかの大雪が降り若干の頭痛を感じつつ、今日も今日とてRuby学習。
- 作者: 久保秋真
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/11/26
- メディア: 単行本
- クリック: 4回
- この商品を含むブログ (1件) を見る
16章からは第四部 発展編ということでデータのファイル入出力を扱う。
ここまで来ると例えばログ解析したりといった実務でも使い様が出てくるので、なんとなく楽しくなってくる。
16章ではコンピュータにおけるファイルの説明。
軽く流し見程度に読み飛ばす。
17章では実際にファイルの入出力を行うプログラムを作成する。
1.なにはともあれファイルハンドルの作成
open("[ファイル名]", "[モード]:[エンコード]")
もしくは
File::open("[ファイル名]", "[モード]:[エンコード]")
のような形式で記述する。
Perlでいうところの
open my $fh, '<', $filename
と思えばOK。
エンコードを開くタイミングで明示的に指定できるのは地味に便利。
ちなみに省略も可能。
Ruby | Perlでいうところの・・・ | 動作 |
w | > | 新規作成 |
w+ | ? | 新規作成かつ読み込み |
r | < | 読み込み |
r+ | ? | 読み込みかつ書き込み |
a | >> | 追記 |
a+ | ? | 追記かつ読み込み |
正直+系がどういうことだってばよ状態なのだけど、便利は便利なんだろうな。
2.ファイル閉じ
おなじみファイル保存などでの閉じる動作はPerl同様にclose。
file = open("file", 'r:UTF-8') file.close
3.読み込み
read:ファイルのすべてのデータを読み込む
print file.read
gets:一行ずつ読み込む
while(file.gets)
each:一行ずつ読み込む
file.each {line|
Perlでログを読み込む際は
open my $fh, '<', $log; while( $line = <$fh>){ print $line; }
とかやってることを考えると手順的にそこまで変わらないかな?
4.書き込み
print:標準出力と同じ要領でファイルに書き込み
file.print("hoge¥n")
puts:改行付きの書き込み
file.print("hoge")
Perlだとprint $fh "hogehoge"とかでファイルハンドルを指定し忘れたりするので、ファイルクラスのメソッドとして使えるのは地味にバグ防止に良いんじゃなかろうか。
5.ブロック
openからcloseまでの間の処理をブロックとしてまとめて記述できる。
open("file", "r:UTF-8") { |file| print file.read }
意図しないところで書き込んだり読み込んだりすることが無いのでちょっとした作業には便利そう。
6.削除
deleteもしくはunlink
File.delete("file") File.unlink("file")
これPerlだとどうやるか知らないや・・・
Perlでいうところのファイル判定の-eとかがまだ出てきてないのが気になるが、とりあえず入出力は使えるようになった。
ここまで出来ると業務で書くちょっとしたスクリプトをRubyで代替できそう。
Perlよりはオブジェクト指向らしい見通しの良い書き方ができるのが良いね。
余談
僕がKindle買った時にまず集めようと思ったのはさよなら絶望先生のシリーズだったりする。
当初はKindleストアになくてがっかりしていたのだけれど、最近みたらKindleストアにも入っていたので、最近ちびちび買っては昼休みに読み進めている。
- 作者: 久米田康治
- 出版社/メーカー: 講談社
- 発売日: 2005/09/16
- メディア: コミック
- 購入: 3人 クリック: 323回
- この商品を含むブログ (722件) を見る
なんだかんだで声優さんのラジオを面白いと思うようになったのもこの作品がきっかけだし、時事ネタを見れば懐かしく思うし、風刺ネタには今読んでもなお鋭さに感心させられる。