Uzyskuję dostęp do pliku, a przed jego dodaniem chcę usunąć ostatnią linię z pliku. Czy jest jakiś skuteczny sposób robienia tego w Ruby?Jak usunąć ostatni wiersz pliku w Ruby?
To właśnie używam dostęp do pliku:
file = File.new("imcs2.xml", "a")
Uzyskuję dostęp do pliku, a przed jego dodaniem chcę usunąć ostatnią linię z pliku. Czy jest jakiś skuteczny sposób robienia tego w Ruby?Jak usunąć ostatni wiersz pliku w Ruby?
To właśnie używam dostęp do pliku:
file = File.new("imcs2.xml", "a")
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
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
}
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ć:
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ę! –
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ą. –
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
Ten kod nie usuwa ostatniego wiersza pliku. –