web-dev-qa-db-ja.com

Rubyでファイルに書き込むにはどうすればいいですか?

データベースからデータを読み取り、それをテキストファイルに保存する必要があります。

Rubyでどうすればいいの? Rubyにファイル管理システムはありますか?

528
ohana

Rubyの Fileクラス は、::new::openの内外を示しますが、その親である IO class は、#read#writeの深さに入ります。

169
jdl

以下を探していますか?

File.open(yourfile, 'w') { |file| file.write("your text") }
877
Todd R

あなたはショートバージョンを使用することができます:

File.write('/path/to/file', 'Some glorious content')

書き込まれた長さを返します。詳細とオプションについては :: write を参照してください。

ファイルが既に存在する場合は、ファイルに追加するには

File.write('/path/to/file', 'Some glorious content', mode: 'a')

これはほとんどの場合推奨される方法です。

 File.open(yourfile, 'w') { |file| file.write("your text") }

ブロックがFile.openに渡されると、Fileオブジェクトはブロックの終了時に自動的に閉じられます。

File.openにブロックを渡さない場合は、ファイルが正しく閉じられ、内容がfileに書き込まれたことを確認する必要があります。

begin
  file = File.open("/tmp/some_file", "w")
  file.write("your text") 
rescue IOError => e
  #some error occur, dir not writable etc.
ensure
  file.close unless file.nil?
end

ドキュメント :にあります。

static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
    VALUE io = rb_class_new_instance(argc, argv, klass);
    if (rb_block_given_p()) {
        return rb_ensure(rb_yield, io, io_close, io);
    }
    return io;
}
240
Tombart

Zambri の答え ここで見つけた は最高です。

File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }

<OPTION>のオプションは次のとおりです。

r - 読み取り専用ファイルが存在している必要があります。

w - 書き込み用の空のファイルを作成します。

a - ファイルに追加します。ファイルが存在しない場合は作成されます。

r+ - 読み取りと書き込みの両方で更新用にファイルを開きます。ファイルが存在している必要があります。

w+ - 読み書き両方のために空のファイルを作成します。

a+ - 読み込みと追加のためにファイルを開きます。ファイルが存在しない場合は作成されます。

あなたの場合、wが望ましいです。

112
mvndaai

例によって学ぶ私達のそれらのために...

このようにファイルにテキストを書く:

IO.write('/tmp/msg.txt', 'hi')

ボーナス情報...

このように読み返す

IO.read('/tmp/msg.txt')

頻繁に、私は私のクリップボードにファイルを読みたいです***

Clipboard.copy IO.read('/tmp/msg.txt')

そして他の時には、私は私のクリップボードにあるものをファイルに書きたいです***

IO.write('/tmp/msg.txt', Clipboard.paste)

***あなたはクリップボードgemがインストールされていると仮定します

参照してください: https://rubygems.org/gems/clipboard

31
l3x

ファイルの以前の内容を破棄するには、ファイルに新しい文字列を書き込みます。

open('myfile.txt', 'w') { |f| f << "some text or data structures..." } 

古い内容を上書きせずにファイルに追加するには

open('myfile.txt', "a") { |f| f << 'I am appended string' } 
18
Marko Tunjic