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

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

但是这个文件分别打印每一行。


我必须使用stdin,如ruby my_prog。rb < file.txt,这里我不能假设文件使用的行结束字符是什么。我该怎么处理呢?


当前回答

那么gets呢?

myFile=File.open("paths_to_file","r")
while(line=myFile.gets)
 //do stuff with line
end

其他回答

你的第一个文件有Mac Classic的行结束符(那是“\r”而不是通常的“\n”)。打开它

File.open('foo').each(sep="\r") do |line|

指定行结束符。

那么gets呢?

myFile=File.open("paths_to_file","r")
while(line=myFile.gets)
 //do stuff with line
end

对于有头文件的文件,我倾向于以下方法:

File.open(file, "r") do |fh|
    header = fh.readline
    # Process the header
    while(line = fh.gets) != nil
        #do stuff
    end
end

这允许您以不同于内容行的方式处理标题行(或多个行)。

File.foreach(filename).with_index do |line, line_num|
   puts "#{line_num}: #{line}"
end

这将为文件中的每一行执行给定的块,而不会将整个文件吸进内存。看到:IO:: foreach。

这是因为每一行的端点。 使用ruby中的chomp方法删除末尾的“\n”或“r”。

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