テキストファイルのアクセス (1/4)
作成:2013-03-11 07:55
更新:2013-03-17 10:35
更新:2013-03-17 10:35
■テキストファイルに書き出す
ある程度まとまった規模のスクリプトを作成する場合、「データの読み込みと保存」は非常に重要となるでしょう。多くの場合、必要なデータ類はファイルとして保存し、そこから読み込んだり書き換えたりしていくものです。
Rubyでは、ファイルアクセスに関する機能が標準で用意されています。中でも「テキストファイル」の利用は、非常に簡単な作業で行うことができます。ここではテキストファイルの基本操作について説明をしましょう。
まずは、「テキストファイルの保存」からです。テキストファイルを利用する場合、「File」というクラスを利用します。これは文字通りファイルを利用するための機能を提供するもので、ここにあるメソッドを使ってテキストファイルを操作できます。では、ファイルの保存について、基本的な流れを整理しましょう。
1. ファイルを開く
●アクセス権の指定記号
'r' 読み込み専用。保存はできない。
'w' 書き出し専用。読み込みはできない。既にファイルがあれば書き換える。
'a' 追記専用。既にファイルがあれば、その末尾に追記していく。
'+' 読み書き両用。(他の記号と併用する)
2. テキストを書き出す
3. ファイルを閉じる
基本的な流れさえ理解すれば、非常に簡単ですね。実際の例を下にあげておきます。ここではUTF-8で保存するよう、冒頭に# coding: utf-8をつけてあります。またテキストデータの用意に=<<という記号を使っていますね。これは「ヒアドキュメント」というもので、長文テキストを変数などに代入するのに便利な書き方です。
※もうすこしRubyっぽい書き方
これで一応処理はできましたが、「openしてputsしてcloseする」というのは、割とベタな書き方で、Rubyっぽくありません。これはこんな具合に書くこともできます。
Rubyでは、ファイルアクセスに関する機能が標準で用意されています。中でも「テキストファイル」の利用は、非常に簡単な作業で行うことができます。ここではテキストファイルの基本操作について説明をしましょう。
まずは、「テキストファイルの保存」からです。テキストファイルを利用する場合、「File」というクラスを利用します。これは文字通りファイルを利用するための機能を提供するもので、ここにあるメソッドを使ってテキストファイルを操作できます。では、ファイルの保存について、基本的な流れを整理しましょう。
1. ファイルを開く
変数 = File.open( ファイルのパス , アクセス権の指定 )まず最初にFileクラスの「open」を呼び出し、ファイルを開いて、そのファイルを扱うためのインスタンスを変数に代入します。openの第1引数には開くファイルのパスを、第2引数にはアクセス権を指定する値を用意します。アクセス権を示す記号は、以下のいずれかを指定します。省略すると'r'と判断され、読み込み専用となります。ですので、ファイルの書き出しをする場合は、必ず指定しないといけません。
●アクセス権の指定記号
'r' 読み込み専用。保存はできない。
'w' 書き出し専用。読み込みはできない。既にファイルがあれば書き換える。
'a' 追記専用。既にファイルがあれば、その末尾に追記していく。
'+' 読み書き両用。(他の記号と併用する)
2. テキストを書き出す
《File》.puts( テキスト値 )引数に指定したテキストを、Fileインスタンスのファイルに書き出します。
3. ファイルを閉じる
《File》.closeFileインスタンスのファイルを閉じ、リソースを開放して作業終了です。
基本的な流れさえ理解すれば、非常に簡単ですね。実際の例を下にあげておきます。ここではUTF-8で保存するよう、冒頭に# coding: utf-8をつけてあります。またテキストデータの用意に=<<という記号を使っていますね。これは「ヒアドキュメント」というもので、長文テキストを変数などに代入するのに便利な書き方です。
変数 =<< "《終わりを示す値》"こんな具合に、=<<の後に、終わりを示す値を適当に指定しておきます。すると、その次の行から、指定しておいた終りを示す値までに書かれた文をすべてまとめてテキストの値として扱うことができます。長いテキストを用意するときに便利なものなので合わせて覚えておきましょう。
……ここにテキストを書く……
《終わりを示す値》
※もうすこしRubyっぽい書き方
これで一応処理はできましたが、「openしてputsしてcloseする」というのは、割とベタな書き方で、Rubyっぽくありません。これはこんな具合に書くこともできます。
File.open('sample.txt','w') do |file|openの後にdo~endをつけています。そこに用意されている変数fileに対し、<<で書き出す値を送っています。closeはありませんね? do ~ endでopenの範囲が決められていますからcloseはしなくてもいいのです。ちょっと慣れないとわかりにくいですが、「こういう書き方もある」というぐらいには覚えておくとよいでしょう。
file << data
end
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
# coding: utf-8 data =<<"EOB" Hello. this is test! EOB file = File.open('sample.txt','w') file.puts(data) file.close puts('sample.txt に保存しました。')
※関連コンテンツ