Saya mencoba menggunakan kode berikut untuk membaca baris dari file. Tetapi ketika membaca file , isinya semua dalam satu baris:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Tetapi file ini mencetak setiap baris secara terpisah.
Saya harus menggunakan stdin, seperti ruby my_prog.rb < file.txt
, di mana saya tidak bisa berasumsi apa karakter akhir baris yang digunakan file. Bagaimana saya bisa mengatasinya?
ruby
line-endings
seri
sumber
sumber
line_num = 0
, Anda bisa menggunakaneach.each_with_index
atau mungkineach.with_index
.read
.line.chomp
untuk menangani ujung garis (milik @SivivivasanAC )Jawaban:
Saya percaya jawaban saya mencakup kekhawatiran baru Anda tentang penanganan semua jenis akhir baris karena keduanya
"\r\n"
dan"\r"
dikonversi ke standar Linux"\n"
sebelum menguraikan baris.Untuk mendukung
"\r"
karakter EOL bersama dengan reguler"\n"
, dan"\r\n"
dari Windows, inilah yang akan saya lakukan:Tentu saja ini bisa menjadi ide buruk pada file yang sangat besar karena itu berarti memuat seluruh file ke dalam memori.
sumber
/\r?\n/
yang akan mencakup \ r \ n dan \ n tanpa menggabungkan baris kosong seperti komentar PodRuby memang memiliki metode untuk ini:
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
sumber
with_index
ini juga?File.readlines(filename).each_with_index { |line, i| puts "#{i}: #{line}" }
Ini akan mengeksekusi blok yang diberikan untuk setiap baris dalam file tanpa menghirup seluruh file ke dalam memori. Lihat: IO :: foreach .
sumber
File pertama Anda memiliki akhiran garis Mac Classic (itu
"\r"
bukan yang biasa"\n"
). Buka denganuntuk menentukan akhir baris.
sumber
Itu karena endline di setiap baris. Gunakan metode chomp di ruby untuk menghapus garis akhir '\ n' atau 'r' di akhir.
sumber
Saya sebagian dengan pendekatan berikut untuk file yang memiliki header:
Ini memungkinkan Anda memproses baris tajuk (atau garis) secara berbeda dari garis konten.
sumber
bagaimana mendapat ?
sumber
Jangan lupa bahwa jika Anda khawatir tentang membaca dalam file yang mungkin memiliki garis besar yang bisa membanjiri RAM Anda saat runtime, Anda selalu dapat membaca file sepotong-makan. Lihat " Mengapa menghirup file itu buruk ".
sumber