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