Necesito leer los datos de la base de datos y luego guardarlos en un archivo de texto.¿Cómo escribir en el archivo en Ruby?
¿Cómo puedo hacer eso en Ruby? ¿Hay algún sistema de administración de archivos en Ruby?
Necesito leer los datos de la base de datos y luego guardarlos en un archivo de texto.¿Cómo escribir en el archivo en Ruby?
¿Cómo puedo hacer eso en Ruby? ¿Hay algún sistema de administración de archivos en Ruby?
El Rubí File class le dará los pormenores de ::new
y ::open
pero su padre, el IO class, entre en la profundidad de #read
y #write
.
¿Estás buscando lo siguiente?
File.open(yourfile, 'w') { |file| file.write("your text") }
Esto se enfoque preferido en la mayoría de los casos:
File.open(yourfile, 'w') { |file| file.write("your text") }
Cuando un bloque se pasa a File.open
, el objeto del archivo se cerrará automáticamente cuando el bloque termina.
Si no pasa un bloque al 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
usted lo puede encontrar en 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;
}
Sí, usando la sintaxis del bloque con {| archivo | ....} cerrará el archivo cuando se cierre el bloque. – wesgarrison
Cool, gracias. No estaba seguro de eso. Aquí hay más información sobre bloques y 'File.open' http://blog.rubybestpractices.com/posts/rklemme/001-Using_blocks_for_Robustness.html también se menciona en la documentación oficial – Tombart
Simplemente algo ruby way-ish: nil es un objeto, por lo que para comprobar si un archivo es nulo, se pregunta al objeto en lugar de comparar (file.nil? en lugar de file == nil) – JCabello
respuesta Zambri 's found here es la mejor.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
donde sus opciones para <OPTION>
son:
r
- de sólo lectura. El archivo debe existir.
w
- Cree un archivo vacío para escribir.
a
- Agregar a un archivo. El archivo se crea si no existe.
r+
- Abre un archivo para actualizar tanto la lectura como la escritura. El archivo debe existir.
w+
- Crea un archivo vacío para leer y escribir.
a+
- Abre un archivo para leer y anexar. El archivo se crea si no existe.
En su caso, es preferible w
.
Puede utilizar la versión corta:
File.write('/path/to/file', 'Some glorious content')
Devuelve la longitud escrita; ver ::write para más detalles y opciones.
FYI este método abreviado solo funciona comenzando con Ruby 1.9.3. No hay tal método en ninguna versión anterior de 1.9 o 1.8. En ese caso, debe usar el método de bloque más largo publicado por @mvndaai –
, para su información, esto cierra correctamente el archivo cuando termina. –
[documentos de la clase IO] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-c-write) dicen que cierra el archivo – nruth
Para aquellos de nosotros que aprendemos con el ejemplo ...
Escribir texto en un archivo de la siguiente manera:
IO.write('/tmp/msg.txt', 'hi')
INFO PRIMA ...
Leer de nuevo como esto
IO.read('/tmp/msg.txt')
frecuentes, 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 a un archivo ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** asume que ha instalado la gema portapapeles
Tenga cuidado con la opción 'IO.write' ** sobrescribir ** el contenido del archivo en lugar de agregar. Agregar con IO.write es un poco tedioso. – fguillen
¿No estás seguro de lo que estás hablando? El comando IO.write no necesita esa opción para escribir en un archivo. Tendría cuidado de guardar el archivo en el directorio/tmp o en el directorio actual; De lo contrario, es posible que vea un mensaje 'Errno :: ENOENT: No such such file or directory @ rb_sysopen' y el archivo creado con un tamaño de 0 bytes. – l3x
para destruir la contenido anterior del archivo, a continuación, escribir una nueva cadena en el archivo:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
para anexar a un archivo sin sobrescribir sus contenidos antiguos:
open('myfile.txt', "a") { |f| f << 'I am appended string' }
Gracias @Geoff. Es bueno ver a los nuevos usuarios limpiando preguntas y respuestas desactualizadas. Logra un mejor sitio en general. – jdl
Encuentro esto irónico. La respuesta está muy bien documentada ... pero ahora, un año después, esta pregunta es el primer éxito en Google. Cuando se formuló la pregunta, puede parecer que el PO estaba dedicando poco esfuerzo, pero ahora, en lo que respecta a Google, esta es la mejor fuente. – Jeff
Probablemente porque todo lo que realmente necesitas saber está aquí. La mía es la respuesta "enséñale a un hombre a pescar" para aquellos que quieran leer los detalles más finos, y hay muchas respuestas para "dar un hombre un pez" aquí también para las personas que solo quieren cortar y pegar. No es sorprendente que esta combinación termine bien clasificada en Google. – jdl