我试图使用以下代码从文件中读取行。但是当读取文件时,内容都在一行中:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
但是这个文件分别打印每一行。
我必须使用stdin,如ruby my_prog。rb < file.txt,这里我不能假设文件使用的行结束字符是什么。我该怎么处理呢?
我试图使用以下代码从文件中读取行。但是当读取文件时,内容都在一行中:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
但是这个文件分别打印每一行。
我必须使用stdin,如ruby my_prog。rb < file.txt,这里我不能假设文件使用的行结束字符是什么。我该怎么处理呢?
当前回答
Ruby确实有一个方法:
File.readlines('foo').each do |line|
puts(line)
end
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
其他回答
不要忘记,如果您担心读取一个文件时可能会有大量的行,这会在运行时淹没您的RAM,那么您总是可以逐条读取文件。参见“为什么吮吸文件是不好的”。
File.open('file_path', 'rb') do |io|
while chunk = io.read(16 * 1024) do
something_with_the chunk
# like stream it across a network
# or write it to another file:
# other_io.write chunk
end
end
File.foreach(filename).with_index do |line, line_num|
puts "#{line_num}: #{line}"
end
这将为文件中的每一行执行给定的块,而不会将整个文件吸进内存。看到:IO:: foreach。
Ruby确实有一个方法:
File.readlines('foo').each do |line|
puts(line)
end
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
对于有头文件的文件,我倾向于以下方法:
File.open(file, "r") do |fh|
header = fh.readline
# Process the header
while(line = fh.gets) != nil
#do stuff
end
end
这允许您以不同于内容行的方式处理标题行(或多个行)。
这是因为每一行的端点。 使用ruby中的chomp方法删除末尾的“\n”或“r”。
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line.chomp}"
end