2009-07-27 10 views
5

Ich greife auf eine Datei zu, und bevor ich sie anhefte, möchte ich die letzte Zeile aus der Datei löschen. Gibt es eine effiziente Möglichkeit, dies in Ruby zu tun?Wie lösche ich die letzte Dateizeile in Ruby?

Dies ist, was ich auf die Datei zugreifen bin mit:

file = File.new("imcs2.xml", "a") 

Antwort

4

Angenommen, Sie wan t die gesamte letzte Zeile der Datei zu entfernen, können Sie diese Methode verwenden, die den Anfang der letzten Zeile lokalisiert und beginnt von dort zu schreiben:

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

Dies funktioniert, solange Ihr Ersatztext länger ist als der Originaltext in der letzten Zeile der Datei. Wenn es kürzer ist, wird der Rest nach der eingefügten Zeile in eine neue Zeile verschoben. – Excalibur

+0

Dieser Code löscht nicht die letzte Zeile einer Datei. –

1

Der einfachste Weg ist einfach die ganze Datei zu lesen, entfernen Sie die ‚\ n‘ am Ende, und sie alle mit Ihrem eigenen umschreiben Inhalt:

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 
} 

Alternativ nur io.seek() rückwärts über die letzten newline falls vorhanden:

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

Ich werde nicht versuchen zu erraten, was Sie versuchen, zu tun, aber wenn Sie versuchen, das schließende Tag des Wurzelelements in einer XML-Datei loszuwerden, so dass Sie weitere Kind-Tags hinzufügen können, dann wieder das schließende Stamm-Tag hinzufügen, würde ich mir vorstellen, dass es Ruby-Module, die diese Aufgabe des Schreibens/Bearbeitens von XML erleichtern. Ich sag bloß.

Vielleicht Erbauer:

hpricot scheint auch zu funktionieren:

+0

Du solltest einen Job als Hellseher bekommen :). Genau das habe ich versucht, es ist ein kleiner Hackjob, deshalb habe ich nicht zu viel nachgeforscht, aber danke, dass du die Extra-Meile gegangen bist! –

+0

Kein Problem! Entschuldigung, ich habe keine definitive Antwort gepostet, aber ich bin fast sicher, dass es Tools gibt, die das für Sie tun. Ich suchte ungefähr 15 Minuten lang und ich fand diese. Natürlich sind Sie mit der Motivation, Ihr Projekt zu beenden, verpflichtet, mehr, wahrscheinlich bessere Lösungen zu finden, falls die von mir zur Verfügung gestellten nicht ausreichen. –

Verwandte Themen