论坛首页 Ruby版 ruby

ruby简单文件截取最后一行操作

浏览 3109 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-07-29
文件夹下n个文件,读取不相同任意两个文件的最后一行文本组成一个新的文件

如假设有3个文件,A文件最后一行为: AAAA
               B文件最后一行为:BBBB
               C文件最后一行为: CCCC
那么应该生成3个新文件:
文件 AB  内容 AAAABBBB
    BC       BBBBCCCC
    AC       AAAACCCC
-----------------------------

这个用java写了也花了点时间,用脚本语言是否会快些?另:有没有比较有效的抓到最后一行文本的办法?如果文本数据量很大的话
   
最后更新时间:2008-07-29
读取文件最后一行: `tail -1 FILE`
最简单的实现方式是
`tail -1 A > AB`;`tail -1 B >> AB`

有了A,B,C,干吗要把他们的最后一行取出来,还是组成三个文件而不是六个文件?
   
0 请登录后投票
最后更新时间:2008-07-30
做实验时的需求,原来ABC三个文件,再生成两两互相取最后一行的新文件AB,BC,AC 共六个文件
   
0 请登录后投票
最后更新时间:2008-07-30
lines = {}
Dir.glob('*').each{|file| lines[file] = IO.readlines(file)[-1]}
lines.keys.combination(2).each{|x,y| File.open(x+y,'w+'){|f| f << lines[x]+lines[y]}}

 

   
0 请登录后投票
最后更新时间:2008-07-30
读最后一行,可惜IO没有to_negative或reverse的支持,一行行读下来,遇到大文件会慢。
file.seek(一个负值,IO::SEEK_END) 又不能保证接下来readline能得到最后的整行
用纯ruby有什么好办法吗?
花花公子和phoenix520的代码合一下就好了
   
0 请登录后投票
最后更新时间:2008-07-30
p=IO.popen("tail -n1 A")
p.readline
   
7 请登录后投票
最后更新时间:2008-07-30
用ruby调tail是最快的,
如果操作系统没有tail,可以用很傻的遍历:
last = File.open(filename) {|f| f.inject {|ignore,line| line}

有一道Ruby Quiz和这个问题相关:
http://rubyquiz.com/quiz64.html
   
0 请登录后投票
最后更新时间:2008-07-30
操作系统如果没有tail还是建议装一个MSYS,保证受益无穷

Quake Wang 写道
用ruby调tail是最快的,
如果操作系统没有tail,可以用很傻的遍历:
last = File.open(filename) {|f| f.inject {|ignore,line| line}

有一道Ruby Quiz和这个问题相关:
http://rubyquiz.com/quiz64.html
   
0 请登录后投票
最后更新时间:2008-07-30
http://file-tail.rubyforge.org/
找到这个东东
Description
This Library is similar to Perl's File::Tail. It can be used to extend Ruby's File-objects, as mixin for own File-derived classes, or by using the included simple File::Tail::Logfile class.

gem install后,应该如何使用呢?

--------
谢谢ls各位大牛 拜... java若干io操作用命令行一句竟然就可以实现  谢各位
   
0 请登录后投票
最后更新时间:2008-07-30
哈哈,好玩。
http://file-tail.rubyforge.org/doc/index.html

class File
  include File::Tail

  def self.last_line(filename)
    open(filename) do |file|
      file.backward(1)
      result = file.tail(1).first
    end
    result
  end
end

puts File.last_line(filename)
   
0 请登录后投票
论坛首页 Ruby版 ruby

跳转论坛:
JavaEye推荐