file-io file - Comment écrire au fichier dans Ruby?





read extension (7)


La classe Ruby File vous donnera les tenants et aboutissants de ::new et ::open mais son parent, la classe IO , entre dans la profondeur de #read et #write .

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 faire ça dans Ruby? Y a-t-il un système de gestion de fichiers dans Ruby?




Cette approche est 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 File 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 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 la 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;
}



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



Cherchez-vous ce qui suit?

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



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




Vous pouvez utiliser la version courte:

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

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




Ce code fonctionne également.

#!/bin/bash
FILE=$1
if [ -f $FILE ]; then
 echo "File '$FILE' Exists"
else
 echo "The File '$FILE' Does Not Exist"
fi




ruby file-io