为了账号安全,请及时绑定邮箱和手机立即绑定

在Ruby中读取文件的所有常用方法有哪些?

在Ruby中读取文件的所有常用方法有哪些?

qq_遁去的一_1 2019-11-05 11:11:08
在Ruby中读取文件的所有常用方法有哪些?例如,这是一种方法:fileObj = File.new($fileName, "r")while (line = fileObj.gets)  puts(line)endfileObj.close我知道Ruby非常灵活。每种方法的优点/缺点是什么?
查看完整描述

4 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

File.open("my/file/path", "r") do |f|

  f.each_line do |line|

    puts line

  end

end

# File is closed automatically at end of block

也可以在上述之后显式关闭文件(传递一个块open为您关闭文件):


f = File.open("my/file/path", "r")

f.each_line do |line|

  puts line

end

f.close


查看完整回答
反对 回复 2019-11-05
?
慕后森

TA贡献1802条经验 获得超5个赞

您可以一次读取所有文件:


content = File.readlines 'file.txt'

content.each_with_index{|line, i| puts "#{i+1}: #{line}"}

当文件很大或可能很大时,通常最好逐行处理它:


File.foreach( 'file.txt' ) do |line|

  puts line

end

有时,您可能想要访问文件句柄,或者自己控制读取:


File.open( 'file.txt' ) do |f|

  loop do

    break if not line = f.gets

    puts "#{f.lineno}: #{line}"

  end

end

如果是二进制文件,则可以指定nil-separator和块大小,如下所示:


File.open('file.bin', 'rb') do |f|

  loop do

    break if not buf = f.gets(nil, 80)

    puts buf.unpack('H*')

  end

end

最后,您可以无障碍地执行此操作,例如,当同时处理多个文件时。在这种情况下,必须显式关闭文件(根据@antinome的注释进行改进):


begin

  f = File.open 'file.txt'

  while line = f.gets

    puts line

  end

ensure

  f.close

end

参考:File API和IO API。


查看完整回答
反对 回复 2019-11-05
  • 4 回答
  • 0 关注
  • 879 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信