File.readは大変便利ですが、まとめて読み込むため、読み込んだテキストデータを利用するのは逆に面倒かもしれません。
例えば、保管されたデータを加工して処理するような場合、すこしずつ読み込んでいったほうが処理しやすいでしょう。
こうした場合、「1行ずつテキストを読み込む」というやり方を取るのが一般的です。これにはいくつかのやり方があるのですが、ここでは「
foreach」というメソッドを紹介しておきましょおう。
File.foreach( ファイルのパス ){ | 変数 |
……変数を利用し処理……
}
foreachは、配列などを処理する
eachと同様に、多数の値すべてに処理を実行していくような場合に用いられます。()内の引数部分にファイルのパスを指定し、その後の{}内に処理を記述します。最初の部分に、
| 変数 |というものがついていますね? この変数部分に、1行ずつ読み込まれたテキストが代入されます。
注意したいのは、「変数に取り出されるテキストからは、改行コードが除かれていない」という点でしょう。変数の末尾には、改行コードがついたままになっているのです。もし、テキスト部分だけを利用したいのであれば、「
chomp」メソッドを使い、改行コードを取り除いたものを処理するとよいでしょう。
下のリスト欄に、実際の利用例を挙げておきます。
sample.txtを開き、1行ずつ読み込んで変数にまとめて表示するサンプルです。前回の
File.readを使った例と比べてみましょう。こちらのほうが少々複雑ですが、しかし1行ずつテキストを取り出せるため、加工などには向いていることがわかるでしょう。