2016-09-28 40 views
0

我有許多的日誌文件,每個文件包含像這樣的一行:紅寶石檢查是否字符串包含子

THIS LINE IS DIFFERENT CASE_WINDOWS_TEST_00 PASSED 

我在尋找,如果行包含「_XXX_TEST_」字符串。我創建的哈希:

@@groups = { 
    "_LINUX_TEST_" => "Linux_tests", 
    "_WINDOWS_TEST_" => "Windows_tests" 
} 

要檢查行包含(從@@基團的鍵)的子我實現它返回從@@基團的值的方法get_group_name。

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返回來自@@組哈希的密鑰列表,而不是一個字符串(來自該哈希的值)。

+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 
+0

你的猜測是正確的,我想,但它應該是固定的另一種方法。 –

+0

@SergioTulentsev是你的權利! –

+0

不錯,但沒有。此代碼是超級破碎:) –

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 
+0

多一個選項: def get_group_name(searchLine) @ groups.keys.detect do | i | 如果searchLine.include?我 返回@groups [i] 結束 結束 結束 – Anuja

+0

如果我們使用檢測,我們不需要'如果'或'返回' –

+0

我們需要它,因爲迭代是關鍵而不是價值。所以它會返回關鍵但我們需要價值。 – Anuja

相關問題