尝试在日志文件上迭代多个步骤,并通过命令行输入将每个步骤附加到文本。我目前有工作代码,但问题是有很多重复的数据以及我必须为每个步骤创建一个方法,而我希望只有一个方法能够迭代第一步到... 。"无限"如果有必要,基本上可以采取我拍摄的任何步骤。
@log_file = "07-07-14 to 07-13-14_debug.log"
def s1
File.readlines(@log_file).each do |line|
if line.match /Recording dut_serial_number/
File.open("step_one.txt", "a") << line
elsif (line =~ /Beginning step #1 / .. line =~ /Beginning step #2 /) && line !~ /Beginning step #2 /
File.open("step_one.txt", "a") << line
else
nil
end
end
end
def s2
File.readlines(@log_file).each do |line|
if line.match /Recording dut_serial_number/
File.open("step_two.txt", "a") << line
elsif (line =~ /Beginning step #2 / .. line =~ /Beginning step #3 /) && line !~ /Beginning step #3 /
File.open("step_two.txt", "a") << line
else
nil
end
end
end
目标是通过接受命令行输入,如上所述对每个步骤进行排序,如下所示:
command_line = ARGV[0..1]
if command_line = "--step" + "1"
s1
elsif command_line = "--step" + "2"
s2
else
nil
end
答案 0 :(得分:1)
由于你的两个例程正在做同样的事情,所以抽象一个只为你想做的事情带一个参数的函数应该很容易。我还建议使用OptionParser而不是手动管理ARGV。
在我看来,你可以这样做:
log_files = {1 => "step_one.txt", 2 => "step_two.txt"}
def read_log(step) #step is an integer
File.readlines(@log_file).each do |line|
if line.match /Recording dut_serial_number/
File.open(log_files[step], "a") << line
elsif (line =~ /Beginning step ##{step} / .. line =~ /Beginning step ##{step} /) && line !~ /Beginning step ##{step} /
File.open(log_files[step], "a") << line
else
nil
end
end
end
根据您的需要,这可能不起作用,但它可能会让您走上正确的轨道。