Hej Ostatnio piszę sobie taki mały skrypcik w Ruby, który odczytuje każdą linię z pliku i robi tam sobie jakieś rzeczy. Chodzi mi o to, że chcę się pozbyć z końca każdej linii białych znaków. Używam do tego funkcji “rstrip”, ale działa w jakiś dziwny sposób. Teraz osobno “stripuję” każdą linię, następnie całość pakuję ponownie do pliku i dopiero zabieram się za manipulację treścią pliku. Niezbyt elegancko, ale działa tak jak chcę.
cc = File.readlines('plik.txt').each do |line|
line.rstrip!
end
File.open('plik.txt', "w") {|file| file.puts cc }
File.readlines('plik.txt').each do |line|
if line[0] == "!"
b.push(line)
else
line[-4]=":"
c.push(line[-6,5].split(":")) end
end
Dlaczego by nie użyć “rstrip” tylko w tej ostatniej pętli? Próbowałem więc czegoś takiego:
File.readlines('plik.txt').each do |line|
aa = line.rstrip!
if aa[0] == "!"
b.push(aa)
else
aa[-4]=":"
c.push(aa[-6,5].split(":"))
end
end
Błędu żadnego nie wywala, tylko wynik końcowy mam jakiś z kosmosu w tym drugim podejściu. Nie wiem dlaczego
Dodatkowo zobacz sobie so zwraca rstrip! w przypadku gdy nie ma białych znaków na końcu (pownieneś działać bezpośrednio na zmiennej line zamiast na aa w innym wypadku w końcu dostaniesz wyjątkiem). Jeśli chcesz później modyfikować zmienną aa skorzystaj z rstrip zamiast rstrip!
Dziękuję za pomoc - trochę nieświadomie zwróciłeś uwagę na fragment, który uważałem za dobry, a okazało się, że w nim tkwił błąd Otóż tam ma być przypisanie, tylko że “-3”, a nie “-4”. Zamieniam sobie każdy znak na pozycji trzeciej od końca na dwukropek. Nagle wszystko zaczęło działać Teraz mam tylko tę jedna pętelkę
File.readlines('wyniki.txt').each do |line|
if line[0] == "!"
b.push(line)
else
line.rstrip!
line[-3]=":"
c.push(line[-5,5].split(":"))
end
end
Nie chcę nawet dochodzić dlaczego poprzedni kod działał z tym błędem.
Nazwy zmiennych faktycznie mało czytelne, więc pójdą do poprawki. Może się przydać kiedy do tego zajrzę za pół roku