Foramtowanie tekstu

Witam

Napotkałem na mały problem z formatowaniem tekstu z pliku. W pliku znajdują się dane.

Nazwa_pierwsza - 12345 pkt Nazwa_druga - 23456 pkt itd... [max. 10 wyników]
Teraz te dane chcę posegregować, dodać do nich nowy wynik i znów posegregować. Na końcu usunąć najniższy wynik.

Miałem taki pomysł by najpierw zapisać wszystkie linie do tablicy. Wartość linii była by filtrowana tak aby same liczby były zapisywane do niej. Następnie posortował bym tą tablice. Nie wiem co zrobić żeby później przy zapisie tak posortowanej tablicy od razu dodawać “Nazwa”.

Mam jeszcze pomysł z tablicą asocjacyjną.

def formatuj_wynik f = File.open( "wyniki", "r+" ) t = Hash.new f.each {|line| t[f.lineno => line.gsub(/\D/,"")]} f.close t.size # Daje 0 ! end
Tylko jak widać t.size daje 0.

Pozdrawiam

The All-Seeing Eye

[code=ruby]lines = File.read(“rank.txt”)

lines << “Nazwa_trzecia - 1000000 pkt\n”

lines = lines.sort_by {|line| line.match(/(\d+)\s*pkt/)[1].to_i }.reverse
lines.delete_at(lines.size - 1)

File.open(“rank.txt”, “w”) do |f|
f << lines.join
end[/code]

Dziękuje za pomoc !

The All-Seeing Eye

EDIT

File.open("rank.txt", "w") do |f| f << lines.join end
Czy czasami przed end nie powinno być f.close?

Nie, ponieważ metoda ta jest wywoływana automatycznie po opuszczeniu bloku. Czyż to nie piękne? :slight_smile:

No właśnie - piękne :). Dodam tylko, że plik zostanie zamknięty nawet wtedy gdy wystąpi wyjątek.