2009-07-27 29 views

Respuesta

4

Suponiendo que wan t para eliminar toda la última línea del archivo, puede utilizar este método que localiza el inicio de la última línea y comienza a escribir desde allí:

last_line = 0 
file = File.open(filename, 'r+') 
file.each { last_line = file.pos unless file.eof? } 

file.seek(last_line, IO::SEEK_SET) 
#Write your own stuff here 
file.close 
+0

Esto funciona siempre que el texto de reemplazo sea más largo que el texto original en la última línea del archivo. Si es más corto, el resto se insertará en una nueva línea después de la línea insertada. – Excalibur

+0

Este código no elimina la última línea de un archivo. –

1

La forma más fácil es sólo para leer todo el archivo, quitar el '\ n' al final, y volver a escribir todo con su propio contenido:

filename = "imcs2.xml" 
content = File.open(filename, "rb") { |io| io.read } 
File.open(filename, "wb") { |io| 
    io.print content.chomp 
    io.print "yourstuff" # Your Stuff Goes Here 
} 

Como alternativa, sólo io.seek() hacia atrás en la última línea, si lo hay:

filename = "imcs2.xml" 
File.open(filename, "a") { |io| 
    io.seek(-1, IO::SEEK_CUR) # -1 for Linux, -2 for Windows: \n or \r\n 
    io.print "yourstuff" # Your Stuff Goes Here 
} 
6

No voy a tratar de adivinar lo que está tratando hacer, pero si está tratando de deshacerse de la etiqueta de cierre del elemento raíz en un archivo XML para que pueda agregar más etiquetas secundarias, y luego volver a agregar la etiqueta raíz de cierre, me imagino que hay módulos de rubí por ahí que facilitan esta tarea de escribir/editar XML. Sólo digo.

Quizás Constructor:

hpricot también parece funcionar:

+0

Deberías conseguir un trabajo como psíquico :). Eso es exactamente lo que estaba tratando de hacer, es un pequeño trabajo de hackeo, por eso no investigué demasiado, ¡pero gracias por hacer un esfuerzo adicional! –

+0

¡Ningún problema! Lamento no haber publicado una respuesta definitiva, pero estoy casi seguro de que hay herramientas que harán esto por usted. Busqué alrededor de 15 minutos y encontré esto. Por supuesto, usted con la motivación de terminar su proyecto está obligado a encontrar más, probablemente mejores soluciones, en caso de que las que proporcioné no sean suficientes. –

Cuestiones relacionadas