小编典典

如何在 Ruby 中读取文件的行

all

我试图使用以下代码从文件中读取行。但是在读取文件时,内容都在一行中:

line_num=0
File.open('xxx.txt').each do |line|
  print "#{line_num += 1} #{line}"
end

但是这个文件单独打印每一行。


我必须使用标准输入,例如ruby my_prog.rb < file.txt,我不能假设文件使用的行尾字符是什么。我该如何处理?


阅读 147

收藏
2022-05-12

共1个答案

小编典典

我相信我的回答涵盖了您对处理任何类型的行尾的新担忧,因为两者"\r\n"都在解析行之前"\r"转换为 Linux 标准。"\n"

为了支持"\r"EOL 字符以及常规的"\n", 和"\r\n"Windows,这就是我要做的:

line_num=0
text=File.open('xxx.txt').read
text.gsub!(/\r\n?/, "\n")
text.each_line do |line|
  print "#{line_num += 1} #{line}"
end

当然,这对于非常大的文件可能不是一个好主意,因为这意味着将整个文件加载到内存中。

2022-05-12