从ruby中包含某些关键字的特定行读取文件

从ruby中包含某些关键字的特定行读取文件,ruby,Ruby,我是编程新手,请帮帮我。 我需要根据时间从特定行读取一个文件,并将其写入另一个文件。但是它在写入另一个文件时跳过了第一行 timeStr="2011-08-01 02:24" File.open(path+ "\\logs\\messages.log", "r") do |f| # Skip the garbage before pattern: while f.gets !~ (/#{timeStr}/) do; end # Read yo

我是编程新手,请帮帮我。 我需要根据时间从特定行读取一个文件,并将其写入另一个文件。但是它在写入另一个文件时跳过了第一行

timeStr="2011-08-01 02:24"
File.open(path+ "\\logs\\messages.log", "r") do |f| 
  # Skip the garbage before pattern: 
  while f.gets !~ (/#{timeStr}/) do; end                   
  # Read your data: 
  while l = f.readlines
    File.open(path+ "\\logs\\messages1.log","a") do |file1|
      file1.puts(l)
    end
  end 
end

当我运行上面的脚本时,第一行匹配的timeStr被跳过,并且从第二行文件被写入消息1。打开messages1.log文件时,包含匹配字符串的第一行将不存在。知道如何在写入messages1.log文件时也包括第一行吗

我认为您希望保留与
/{timeStr}/
匹配的行,但此循环:

while f.gets !~ (/#{timeStr}/) do; end
扔掉它。你可以重新安排一下:

#在正确的范围内获取'line'。
直线=零
#吃光'f',直到我们找到我们要找的线为止
#但请记住下面的“line”以供使用。
while(line=f.get)
中断if(line=~/{timeStr}/)
结束
#如果我们找到了我们要找的线路,那就开始工作吧。。。
如果(行)
#抓取文件的其余部分
_rest=f.readlines
#将匹配行前置到文件的其余部分
休止。取消移位(行)
#把它写下来。
File.open(路径+“\\logs\\messages1.log”,“a”)do | file1|
file1.put(剩余部分)
结束
结束

我还没有测试过它,但它应该可以解决打字错误之类的问题。

嘿,谢谢,现在使用您提供的代码,它可以正常工作:)