web-dev-qa-db-fra.com

Comment écrire dans un fichier Ruby?

Je dois lire les données de la base de données puis les sauvegarder dans un fichier texte.

Comment puis-je faire cela en Ruby? Existe-t-il un système de gestion de fichiers dans Ruby?

545
ohana

Le Ruby classe de fichier vous donnera les tenants et les aboutissants de ::new et ::open mais son parent, la classe IO , pénètre dans la profondeur de #read et #write.

172
jdl

Cherchez-vous le suivant?

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

Vous pouvez utiliser la version courte:

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

Il retourne la longueur écrite. voir :: write pour plus de détails et d'options.

Pour ajouter au fichier, s'il existe déjà, utilisez:

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

C'est l'approche privilégiée dans la plupart des cas:

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

Lorsqu'un bloc est passé à File.open, l'objet File sera automatiquement fermé à la fin du bloc.

Si vous ne transmettez pas un bloc à File.open, vous devez vous assurer que le fichier est correctement fermé et que le contenu a été écrit dans le fichier.

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

Vous pouvez le trouver dans documentation :

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

La réponse de Zambritrouvée ici est la meilleure.

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

où vos options pour <OPTION> sont:

r - Lecture seule. Le fichier doit exister.

w - Crée un fichier vide pour l'écriture.

a - Ajouter à un fichier. Le fichier est créé s'il n'existe pas.

r+ - Ouvre un fichier pour mettre à jour en lecture et en écriture. Le fichier doit exister.

w+ - Créez un fichier vide pour la lecture et l'écriture.

a+ - Ouvre un fichier à lire et à ajouter. Le fichier est créé s'il n'existe pas.

Dans votre cas, w est préférable.

113
mvndaai

Pour ceux d'entre nous qui apprenons par l'exemple ...

Écrivez le texte dans un fichier comme ceci:

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

BONUS INFO ...

Lisez-le comme ça

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

Souvent, je veux lire un fichier dans mon presse-papiers ***

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

Et d'autres fois, je veux écrire le contenu de mon presse-papiers dans un fichier ***

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

*** Suppose que vous avez la gem presse-papiers installé

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

31
l3x

Pour détruire le contenu précédent du fichier, écrivez une nouvelle chaîne dans le fichier:

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

Pour ajouter un fichier sans écraser son ancien contenu:

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