2009-07-27 12 views

Odpowiedz

4

Zakładając wan t, aby usunąć całą ostatnią linię pliku, można użyć tej metody, która lokalizuje początek ostatniego wiersza i zaczyna pisać stamtąd:

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

Działa to tak długo, jak tekst zamienny jest dłuższy niż tekst oryginalny w ostatnim wierszu pliku. Jeśli jest krótszy, reszta zostanie przesunięta do nowej linii po wstawionej linii. – Excalibur

+0

Ten kod nie usuwa ostatniego wiersza pliku. –

1

Najprostszym sposobem jest po prostu odczytać cały plik, usuń „\ n” na końcu, i przepisać to wszystko z własnego zawartość:

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 
} 

Alternatywnie, tylko io.seek() do tyłu w ciągu ostatniego znaku nowej linii, jeśli występuje:

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

Nie będę próbować odgadnąć, co próbujesz do zrobienia, ale jeśli próbujesz pozbyć się zamykającego znacznika głównego elementu w pliku XML, aby móc dodać więcej znaczników potomnych, , następnie ponownie dodaj zamykający znacznik główny, wyobrażam sobie, że istnieje moduły ruby, które ułatwiają pisanie/edytowanie XML. Tylko mówię.

Może Builder:

hpricot również wydaje się działać:

+0

Powinieneś dostać pracę jako medium :). Dokładnie to próbowałem zrobić, jest to mała robota, dlatego nie zrobiłem zbyt wielu badań, ale dziękuję za dalszą pracę! –

+0

Nie ma problemu! Przepraszam, że nie wysłałem ostatecznej odpowiedzi, ale jestem prawie pewien, że są tam narzędzia, które zrobią to za Ciebie. Szukałem około 15 minut i znalazłem je. Oczywiście, mając motywację do ukończenia projektu, będziesz musiał znaleźć więcej, prawdopodobnie lepszych rozwiązań, na wypadek, gdyby te, które dostarczyłem, nie wystarczą. –