How to read lines of a file in Ruby
我试图使用以下代码从文件中读取行。 但是在阅读文件时,内容都在一行中:
1 2 3 4 | line_num=0 File.open('xxx.txt').each do |line| print"#{line_num += 1} #{line}" end |
但是这个文件分别打印每一行。
我必须使用stdin,比如
Ruby确实有一个方法:
1 | File.readlines('foo').each do |line| |
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
1 2 3 | File.foreach(filename).with_index do |line, line_num| puts"#{line_num}: #{line}" end |
这将为文件中的每一行执行给定的块,而不会将整个文件压入内存。请参阅:IO :: foreach。
我相信我的答案涵盖了处理任何类型的行结尾的新问题,因为在解析行之前
"和
"
"
要支持
"
"
",以下是我要做的事情:
1 2 3 4 5 6 7 8 9 | line_num=0 text=File.open('xxx.txt').read text.gsub!(/ ?/," ") text.each_line do |line| print"#{line_num += 1} #{line}" end |
当然,这对于非常大的文件来说可能是一个坏主意,因为这意味着将整个文件加载到内存中。
您的第一个文件具有Mac Classic行结尾(即
"
"
1 2 | File.open('foo').each(sep=" ") do |line| |
指定行结尾。
怎么样?
1 2 3 4 | myFile=File.open("paths_to_file","r") while(line=myFile.gets) //do stuff with line end |
这是因为每行的终结线。
使用ruby中的chomp方法删除末尾的' n'或'r'。
1 2 3 4 | line_num=0 File.open('xxx.txt').each do |line| print"#{line_num += 1} #{line.chomp}" end |
对于具有标题的文件,我对以下方法不满意:
1 2 3 4 5 6 7 | File.open(file,"r") do |fh| header = fh.readline # Process the header while(line = fh.gets) != nil #do stuff end end |
这允许您以不同于内容行的方式处理标题行(或多行)。
不要忘记,如果您担心在文件中读取可能会在运行期间淹没RAM的大行,您可以随时读取文件。请参阅"为什么啜饮文件很糟糕"。
1 2 3 4 5 6 7 8 | 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 |