我有很多日志文件,每个文件都包含这样一行:
THIS LINE IS DIFFERENT CASE_WINDOWS_TEST_00 PASSED
我正在搜索行是否包含" _XXX_TEST _"串。我创建了一个哈希:
@@groups = {
"_LINUX_TEST_" => "Linux_tests",
"_WINDOWS_TEST_" => "Windows_tests"
}
要检查该行是否包含子字符串(来自@@ groups的密钥),我实现了方法get_group_name,它返回@@ groups的值。
def get_group_name(searchLine)
@@groups.keys.each do |i|
if searchLine.include? i
return @@groups[i]
end
end
end
工作正常,返回正确的值。我在另一个遍历日志文件的方法中使用此方法。
def get_group_name_from_file(fileName)
# fileName - filename or path to the file.txt
file = File.open(fileName)
while (line = file.gets)
found = get_group_name(line)
if found
return found
end
end
end
这就是问题所在。方法get_group_name_from_file返回@@ groups散列中的键列表而不是一个字符串(该散列中的值)。
答案 0 :(得分:1)
我认为,当您的日志文件没有包含任何@@ groups.keys的行时,可能会出现此问题,因此,为了解决此问题,您可以添加以下行:
@@groups = {
"_LINUX_TEST_" => "Linux_tests",
"_WINDOWS_TEST_" => "Windows_tests"
}
def get_group_name(searchLine)
@@groups[@@groups.keys.find { |key| searchLine.include? key }]
end
def get_group_name_from_file(fileName)
# fileName - filename or path to the file.txt
file = File.open(fileName)
while (line = file.gets)
found = get_group_name(line)
return found if found
end
end
答案 1 :(得分:1)
当它返回每个方法返回的输出时,如果控件未达到最高值,则会发生这种情况:
return @group[i];
您可以将方法更新为:
def get_group_name(searchLine)
@@groups.keys.each do |i|
if searchLine.include? i
return @@groups[i]
end
end
return nil
end
还有一个选择:
def get_group_name(searchLine)
@groups.keys.detect do |i|
if searchLine.include? i
return @groups[i]
end
end
end