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?
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
.
Cherchez-vous le suivant?
File.open(yourfile, 'w') { |file| file.write("your text") }
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')
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;
}
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.
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é
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' }