Ruby 匹配文件中的信息

Ruby 匹配文件中的信息,ruby,Ruby,我想写一些代码来完成以下工作: 如果输入文件(例如:file.out)包含诸如n个失败、n个错误、n个失败、0个错误或0个失败、n个错误(其中n>=1)之类的信息,则puts脚本失败,因为显示了失败或错误 如果输入文件包含以下信息:0个失败、0个错误,则将脚本传递,因为没有显示任何失败和错误 我想我需要写下面这样的东西,但它不能像我期望的那样正常工作: if open("#{file}.out").grep(/[1-9][0-9]* failures|[1-9][0-9]* errors/).l

我想写一些代码来完成以下工作:

如果输入文件(例如:file.out)包含诸如n个失败、n个错误、n个失败、0个错误或0个失败、n个错误(其中n>=1)之类的信息,则puts脚本失败,因为显示了失败或错误

如果输入文件包含以下信息:0个失败、0个错误,则将脚本传递,因为没有显示任何失败和错误

我想我需要写下面这样的东西,但它不能像我期望的那样正常工作:

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
我怎样才能做到这一点

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")
用法:

check_script("file.out")
假设文件包含

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
假设文件包含

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

当我的文件包含以下信息时,此解决方案运行良好:0失败,1错误在本例中,系统按预期返回脚本失败。但是,当我的文件包含以下信息时:0失败,2错误,系统返回脚本已通过,但我希望脚本将返回脚本失败。此外,当我的脚本包含以下信息时:0失败,0错误,系统返回脚本失败,但我希望返回的信息已通过脚本。@battleship您确定该文件不包含0失败,除了0次失败和2次错误之外,还有0次错误?我怀疑你是否有你所说的。这是我的错误,我在错误的位置指向了一个错误的文件。现在我很高兴你建议的代码工作得很完美。非常感谢您的指导。当我的文件包含以下信息时,此解决方案运行良好:0失败,1错误在本例中,系统按预期返回脚本失败。但是,当我的文件包含以下信息时:0失败,2错误,系统返回脚本已通过,但我希望脚本将返回脚本失败。此外,当我的脚本包含以下信息时:0失败,0错误,系统返回脚本失败,但我希望返回的信息已通过脚本。@battleship您确定该文件不包含0失败,除了0次失败和2次错误之外,还有0次错误?我怀疑你是否有你所说的。这是我的错误,我在错误的位置指向了一个错误的文件。现在我很高兴你建议的代码工作得很完美。非常感谢您的指导。此解决方案也适用于我的场景。非常感谢您的精彩回答。此解决方案也适用于我的场景。非常感谢你的回答。