そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

Rubyのお勉強 16「蔵書管理アプリケーションのデータを保存しよう」&17「ファイルをデータに保存してみよう」

東京にまさかの大雪が降り若干の頭痛を感じつつ、今日も今日とてRuby学習。

作りながら学ぶRuby入門 第2版

作りながら学ぶRuby入門 第2版

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ストアにも入っていたので、最近ちびちび買っては昼休みに読み進めている。

さよなら絶望先生(1) (少年マガジンコミックス)

さよなら絶望先生(1) (少年マガジンコミックス)

なんだかんだで声優さんのラジオを面白いと思うようになったのもこの作品がきっかけだし、時事ネタを見れば懐かしく思うし、風刺ネタには今読んでもなお鋭さに感心させられる。