Question Comment écrire dans un fichier en Ruby?


J'ai besoin de lire les données hors de la base de données, puis enregistrez-le dans un fichier texte.

Comment puis-je le faire en Ruby? Y a-t-il un système de gestion de fichiers dans Ruby?


478
2018-05-06 01:11


origine


Réponses:


Le rubis Classe de fichier vous donnera les tenants et les aboutissants de ::new et ::open mais son parent, le Classe IO, entre dans la profondeur de #read et #write.


161
2018-05-06 01:31



Vous recherchez les éléments suivants?

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

813
2018-05-06 01:29



Vous pouvez utiliser la version courte:

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

Il renvoie la longueur écrite; voir ::écrire pour plus de détails et d'options.


510
2017-10-12 17:56



C'est l'approche préférée dans la plupart des cas:

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

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

Si vous ne passez pas un bloc à File.open, vous devez vous assurer que le fichier est correctement fermé et 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;
}

224
2017-10-15 19:55



ZambriLa réponse trouvé ici est le meilleur.

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

où vos options pour <OPTION> sont:

r - Lecture seulement. Le fichier doit exister.

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

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

r+ - Ouvrir un fichier pour la mise à jour à la fois en lecture et en écriture. Le fichier doit exister.

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

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

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


104
2017-10-02 02:11



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

Écrire du texte dans un fichier comme celui-ci:

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

BONUS INFO ...

Lisez-le comme ça

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

Fréquemment, je veux lire un fichier dans mon presse-papiers ***

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

Et d'autres fois, je veux écrire ce qui est dans mon presse-papiers dans un fichier ***

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

*** En supposant que vous avez la gemme de presse-papiers installé

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


30
2018-05-04 06:39



Pour détruire le contenu précédent du fichier, puis écrire 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' } 

16
2018-02-10 21:59