Como escrever no arquivo em Ruby?

Eu preciso ler os dados do database e, em seguida, salvá-lo em um arquivo de texto.

Como posso fazer isso em Ruby? Existe algum sistema de gerenciamento de arquivos em Ruby?

A class Ruby File lhe dará os detalhes de ::new e ::open mas seu pai, a class IO , entra na profundidade de #read e #write .

Você está procurando o seguinte?

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

Você pode usar a versão curta:

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

Ele retorna o comprimento escrito; veja :: escreva para mais detalhes e opções.

Essa é a abordagem preferida na maioria dos casos:

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

Quando um bloco é passado para File.open , o object File será fechado automaticamente quando o bloco terminar.

Se você não passar um bloco para File.open , deverá certificar-se de que o arquivo está corretamente fechado e o conteúdo foi gravado no arquivo.

 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 

Você pode encontrá-lo na documentação :

 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; } 

A resposta de Zambri encontrada aqui é a melhor.

 File.open("out.txt", ' 

onde suas opções para são:

r – somente leitura. O arquivo deve existir.

w – Crie um arquivo vazio para escrita.

a – Anexa a um arquivo. O arquivo é criado se não existir.

r+ – Abra um arquivo para atualizar a leitura e a escrita. O arquivo deve existir.

w+ – Cria um arquivo vazio para leitura e escrita.

a+ – Abra um arquivo para leitura e anexação. O arquivo é criado se não existir.

No seu caso, w é preferível.

Para aqueles de nós que aprendem pelo exemplo …

Escreva um texto para um arquivo como este:

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

BÔNUS INFO …

Leia de volta assim

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

Freqüentemente, eu quero ler um arquivo na minha área de transferência ***

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

E outras vezes, eu quero escrever o que está na minha área de transferência para um arquivo ***

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

*** Supõe que você tenha a gema da área de transferência instalada

Veja: https://rubygems.org/gems/clipboard

Para destruir o conteúdo anterior do arquivo, escreva uma nova string no arquivo:

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

Para append a um arquivo sem sobrescrever seu conteúdo antigo:

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