匹配文件中的信息

时间:2012-12-30 15:46:20

标签: ruby

我想编写一些代码来执行以下操作:

  • 如果输入文件(例如:"file.out")包含"n failures, n errors""n failures, 0 errors""0 failures, n errors"(其中n >= 1)等信息,然后puts "script failed"(因为显示失败或错误)。

  • 如果输入文件包含信息:"0 failures, 0 errors",则puts "script passed"(因为没有显示任何失败和错误)。

我认为我需要编写类似下面的内容(但它不能像我期望的那样正常工作):

if open("#{file}.out").grep(/[1-9][0-9]* failures|[1-9][0-9]* errors/).length > 0
   puts "script passed"
else
   puts "script failed"
end

我该如何做到这一点?

2 个答案:

答案 0 :(得分:4)

def check_script file
  open(file) do |io|
    io.read =~ /(\d+)\s+failures,\s+(\d+)\s+errors/
    puts "script #{$1 == "0" && $2 == "0" ? "passed" : "failed"}"
  end
end

用法:

check_script("file.out")

答案 1 :(得分:2)

假设文件包含

info: 0 failures, 0 errors

代码将是

(File.open("#{file}.out").read).scan(/info: ([0-9]+) failures, ([0-9]+) errors/) do |failures, errors|
    puts (failures.to_i > 0 || errors.to_i > 0) ? "script failed" : "script passed"
end