ここまでは、
File.readや
File.foreachのように、
Fileクラスにあるメソッド一発で処理をさせるようなやり方をしてきました。
しかし、もっと柔軟なファイル処理を行わせる場合、ファイルをオープンし、必要な処理をしていく丁寧な処理方法が用意されています。ファイルの書き出しに使った
open/closeを利用したやり方です。
1. Fileを開くまず、openでファイルを開き、Fileインスタンスを取得します。これは書き出し処理と同じですね。
変数 = File.open( ファイルパス , アクセス権 )
2. each_lineで読み込む続いて、ファイル内のテキストを読み込み処理していきます。これにはいろいろとやり方がありますが、ここでは
each_lineというものを使った方法を紹介しておきます。
《File》.each_line do | 変数 |
……変数を使った処理……
end
each_line doの後の
| 変数 |に各行のテキストが読み込まれていきます。これを利用して行ごとに処理をしていきます。
3. closeでファイルを閉じる最後にファイルを閉じ、リソースを開放して終了です。
《File》.close
each_lineは、こうして見ただけでは
File.foreachを利用したやり方とあまり変わらないように見えるかもしれません。が、実は
each_lineには引数の指定があり、それを利用することで読み込み方を調整できるのです。
rs = 区切り文字 指定のキャラクタで文を区切って読み込ませます。
limit = バイト数 一度に読み込むテキストをバイト数で指定します。
これらを利用することで、更に細かなテキストの読み込み方ができるようになります。簡単な例を下にあげておきましょう。ここでは、半角スペースを区切り文字に指定してテキストを読み込んでいます。つまり、単語単位でテキストが読み込まれ処理できるわけです。
このように
each_liineを使えば、
File.foreachとはまた違ったテキストの処理ができるようになります。合わせて覚えておくとよいでしょう。