2017-11-11 231 views
0

我很確定我錯了。但我希望這個程序能夠通過「phone_numbers.txt」運行,並取代除["Employee Marked Urgency as: low", "Employee Marked Urgency as: high"]之外的任何重複內容。此代碼的結果完全不是。沒有改變。有小費嗎?查找並替換紅寶石,除了一些短語文本文件

file_names = ['phone_numbers.txt'] 
    file_names.each do |file_name| 
     words_to_exclude = ["Employee Marked Urgency as: low", "Employee Marked Urgency as: high"] 
     text = File.read(file_name) 
     lines = text.split("\n") 
     new_contents = lines.uniq.reject do |word| 
     words_to_exclude.include? word 
     end.join("\n") 
     File.open(file_name, "w") { |file| file.puts new_contents } 
    end 
+1

如果您只需要某人查看您的代碼,則應該在[代碼評論](https://codereview.stackexchange.com/)上提出您的問題。如果您有任何問題,例如您的代碼不符合您的要求,或者在運行時出現錯誤,請添加具體問題並提供詳細信息。 – Mehraban

回答

0

我不知道我的理解是正確的,但使用Array#uniq與塊應該做的伎倆:

require 'digest/sha1' # to generate uniqs 

file_names = ['phone_numbers.txt'] 
words_to_exclude = ["Employee Marked Urgency as: low", 
        "Employee Marked Urgency as: high"] 

file_names.each do |file_name| 
    res = File.readlines(file_name).each_with_index.uniq do |s, idx| 
    words_to_exclude.include?(s) ? 
     Digest::SHA1.hexdigest(idx.to_s) : s 
    end.join("\n") 
    File.write(file_name, res) 
end 

這是怎麼回事:如果我們從我們的名單中遇到的單詞,我們生成無論如何,一個uniq足夠的字符串是通過的;否則我們使用原始字符串進行比較。

+0

我認爲你的代碼存在錯誤。我嘗試運行它,但它不會返回任何內容,但它不會返回任何錯誤 – Yeager

+0

''block in

':未定義方法'with_index'for#(NoMethodError)' – Yeager

+0

我無法測試這個,因爲我手頭沒有文件,但我相信你有一個很好的起點。 – mudasobwa