Как записать в файл в Ruby? - PullRequest
536 голосов
/ 06 мая 2010

Мне нужно прочитать данные из базы данных, а затем сохранить их в текстовом файле.

Как я могу сделать это в Ruby? Есть ли в Ruby система управления файлами?

Ответы [ 7 ]

888 голосов
/ 06 мая 2010

Вы ищете следующее?

File.open(yourfile, 'w') { |file| file.write("your text") }
584 голосов
/ 12 октября 2013

Вы можете использовать короткую версию:

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

Возвращает написанную длину; см. :: напишите для более подробной информации и опций.

Чтобы добавить файл, если он уже существует, используйте:

File.write('/path/to/file', 'Some glorious content', mode: 'a')
244 голосов
/ 15 октября 2012

Это предпочтительный подход в большинстве случаев:

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

Когда блок передается в File.open, объект File будет автоматически закрыт по окончании блока.

Если вы не передаете блок в File.open, вы должны убедиться, что файл правильно закрыт, а содержимое записано в файл.

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;
}
170 голосов
/ 06 мая 2010

Класс Ruby File даст вам входы и выходы ::new и ::open, но его родительский класс IO попадет в глубину #read и #write.

112 голосов
/ 02 октября 2013

Замбри ответ найден здесь - лучший.

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

где ваши варианты для <OPTION>:

r - только для чтения. Файл должен существовать.

w - Создать пустой файл для записи.

a - Добавить в файл. Файл создается, если он не существует.

r+ - Открыть файл для обновления как чтения, так и записи. Файл должен существовать.

w+ - Создать пустой файл для чтения и записи.

a+ - Открыть файл для чтения и добавления. Файл создается, если он не существует.

В вашем случае, w предпочтительнее.

31 голосов
/ 04 мая 2015

Для тех из нас, кто учится на примере ...

Напишите текст в файл, подобный этому:

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)

*** Предполагается, что у вас установлен гем из буфера обмена

См .: https://rubygems.org/gems/clipboard

19 голосов
/ 11 февраля 2017

Чтобы уничтожить предыдущее содержимое файла, затем запишите в файл новую строку:

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

Чтобы добавить файл без перезаписи его старого содержимого:

open('myfile.txt', "a") { |f| f << 'I am appended string' } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...