大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 如何从Ruby读取文件从底部到顶部?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
日志文件可能会相当大,所以我已经尝试排除了IO.readlines(“log_file.log”)[ – 200 ..- 1]的方法.
有没有其他方法可以在Ruby中向后读取文件,而不需要插件或宝石?
IO#tail(n)的一个示例实现,它返回最后的n行作为数组:
class IO TAIL_BUF_LENGTH = 1 << 16 def tail(n) return [] if n < 1 seek -TAIL_BUF_LENGTH,SEEK_END buf = "" while buf.count("\n") <= n buf = read(TAIL_BUF_LENGTH) + buf seek 2 * -TAIL_BUF_LENGTH,SEEK_CUR end buf.split("\n")[-n..-1] end end
实现有点天真,但是一个快速的基准测试显示了这个简单的实现可以做出的可笑的区别(使用yes> yes.txt生成的〜25MB文件进行测试):
user system @R_839_10586@l real f.readlines[-200..-1] 7.150000 1.150000 8.300000 ( 8.297671) f.tail(200) 0.000000 0.000000 0.000000 ( 0.000367)
基准代码:
require "benchmark" FILE = "yes.txt" Benchmark.bR_686_11845@bm do |b| b.report "f.readlines[-200..-1]" do File.open(FILE) do |f| f.readlines[-200..-1] end end b.report "f.tail(200)" do File.open(FILE) do |f| f.tail(200) end end end
当然,other implementations已经存在.我没有尝试过,所以我不能告诉你哪个是最好的.
以上是大佬教程为你收集整理的ruby-on-rails – 如何从Ruby读取文件从底部到顶部?全部内容,希望文章能够帮你解决ruby-on-rails – 如何从Ruby读取文件从底部到顶部?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。