Próbowałem użyć następującego kodu, aby odczytać wiersze z pliku. Ale podczas czytania pliku zawartość jest w jednym wierszu:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Ale ten plik drukuje każdą linię osobno.
Muszę użyć stdin, na przykład ruby my_prog.rb < file.txt
, gdzie nie mogę założyć, jakiego znaku końca linii używa plik. Jak sobie z tym poradzić?
ruby
line-endings
remis
źródło
źródło
line_num = 0
, możesz użyćeach.each_with_index
lub ewentualnieeach.with_index
.read
.line.chomp
do obsługi zakończeń linii (dzięki uprzejmości @SreenivasanAC )Odpowiedzi:
Wierzę, że moja odpowiedź obejmuje nowe obawy dotyczące obsługi wszelkiego rodzaju zakończeń linii, ponieważ oba
"\r\n"
i"\r"
są przekształcane do standardu Linux"\n"
przed analizą linii.Aby wesprzeć
"\r"
znak EOL wraz ze zwykłym"\n"
i"\r\n"
z Windows, oto co bym zrobił:Oczywiście może to być zły pomysł na bardzo duże pliki, ponieważ oznacza to załadowanie całego pliku do pamięci.
źródło
/\r?\n/
obejmować zarówno \ r \ n, jak i \ n bez łączenia pustych linii, tak jak zrobiłby to komentarz PodRuby ma na to metodę:
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
źródło
with_index
z tym również korzystać?File.readlines(filename).each_with_index { |line, i| puts "#{i}: #{line}" }
Spowoduje to wykonanie danego bloku dla każdej linii w pliku bez umieszczania całego pliku w pamięci. Zobacz: IO :: foreach .
źródło
Twój pierwszy plik ma zakończenia linii Mac Classic (to
"\r"
zamiast zwykłych"\n"
). Otwórz za pomocąaby określić zakończenia linii.
źródło
Wynika to z linii końcowych w każdej linii. Użyj metody chomp w ruby, aby usunąć linię końcową „\ n” lub „r” na końcu.
źródło
Nie zgadzam się z następującym podejściem do plików z nagłówkami:
Pozwala to na przetwarzanie linii nagłówka (lub linii) inaczej niż linii treści.
źródło
jak o robi ?
źródło
Nie zapominaj, że jeśli obawiasz się o odczytanie pliku, który może mieć ogromne linie, które mogłyby zalać twoją pamięć RAM w czasie wykonywania, zawsze możesz odczytać plik kawałek po posiłku. Zobacz „ Dlaczego włamywanie pliku jest złe ”.
źródło