Rubyのファイル操作

単純な文字列をファイルから読んだりファイルに書き出したりする場合、どこまで単純化できるか。

読み込み

text = File.read("hello.txt")
puts text

これは思いつく限りで、もっとも単純なファイルリード。

書き出し

次に出力。これが厄介。

f = open("out.txt", "w")
f.print "Hello"
f.close
  • "w"なんてものが出てくる
  • さらにfが登場

上記の例だとopenとcloseが必要。closeはなくすことができるけど、その代わりブロックとブロック引数が出てきてしまう(下記のサンプル)。

File.open("out.txt", "w") {|f|
  f.print "Hello"
}

ただ文字列をファイルに書きたいだけなのに、とってもややこしいことに。この辺が難しい。

ファイルのコピー

ちなみに次のように書くとファイルがコピーできる。

text = File.read("file1.txt")
File.open("file2.txt", "w") {|f|
  f.print text
}

モード

結局ファイルを出力するためには、モードの知識が必要になる。というわけでモードの説明は避けられないということになる。

じゃあ最低限必要なモードの知識はなんだろう。

  • "r" …… 読み込みモード
  • "w" …… 書き込みモード。すでにファイルが存在していれば その内容を空にする
  • "a" …… 書き込みモードでオープン。ファイルの末尾に追加される

"+"と"b"に関しては説明しなくても大丈夫かな。

"w"を解説して、そのあと"a"に触れれば混乱が少ないと思う。
"r"については、読み込みモードであることとデフォルトモードであることに触れておく。