Necesito leer los datos de la base de datos y luego guardarlos en un archivo de texto.
¿Cómo puedo hacer eso en Ruby? ¿Hay algún sistema de gestión de archivos en Ruby?
La clase Ruby File le dará los entresijos de ::new
y ::open
pero su padre, la clase IO , profundiza en #read
y #write
.
¿Estás buscando lo siguiente?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
es una variable que contiene el nombre del archivo a escribir.
f.write
genera una Excepción.
File.write('filename', 'content')
Puedes usar la versión corta:
File.write('/path/to/file', 'Some glorious content')
Devuelve la longitud escrita; ver :: escribir para más detalles y opciones.
Para agregar al archivo, si ya existe, use:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Este es el enfoque preferido en la mayoría de los casos:
File.open(yourfile, 'w') { |file| file.write("your text") }
Cuando se pasa un bloque a File.open
, el objeto Archivo se cerrará automáticamente cuando el bloque termine.
Si no pasa un bloque a File.open
, debe asegurarse de que el archivo esté cerrado correctamente y que el contenido se haya escrito en el archivo.
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
Lo puedes encontrar en la documentación :
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;
}
File.open
blog.rubybestpractices.com/posts/rklemme/ ... también se menciona en la documentación oficial
La respuesta de Zambri encontrada aquí es la mejor.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
donde sus opciones <OPTION>
son:
r
- Solo lectura. El archivo debe existir.
w
- Crear un archivo vacío para escribir.
a
- Agregar a un archivo. El archivo se crea si no existe.
r+
- Abra un archivo para actualizar tanto la lectura como la escritura. El archivo debe existir.
w+
- Cree un archivo vacío para leer y escribir.
a+
- Abra un archivo para leer y agregar. El archivo se crea si no existe.
En su caso, w
es preferible.
Para aquellos de nosotros que aprendemos con el ejemplo ...
Escribir texto en un archivo como este:
IO.write('/tmp/msg.txt', 'hi')
INFORMACIÓN ADICIONAL ...
Léelo de nuevo así
IO.read('/tmp/msg.txt')
Con frecuencia, quiero leer un archivo en mi portapapeles ***
Clipboard.copy IO.read('/tmp/msg.txt')
Y otras veces, quiero escribir lo que está en mi portapapeles en un archivo ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Asume que tienes instalada la gema del portapapeles
IO.write
opción de sobrescribir el contenido del archivo en lugar de agregar. Anexar con IO.write es un poco tedioso.
Errno::ENOENT: No such file or directory @ rb_sysopen
mensaje y el archivo creado con un tamaño de 0 bytes.
Para destruir el contenido anterior del archivo, escriba una nueva cadena en el archivo:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Para adjuntar a un archivo sin sobrescribir su contenido anterior:
open('myfile.txt', "a") { |f| f << 'I am appended string' }