我有一個包含多個條目的文本文件。格式是固定的,並且是name_version_versionNumber
。來自txt的最新文件數組讀取所有文件
**example.txt**
cool_name_A_001
something_else_WIP_002
something_else_001
cool_name_B_002
other_thing_010
other_thing_006
返回列表應消除WIP的條目,並提供最新的(最多)版本。輸出爲文本文件,上面應該是
cool_name_A_001
cool_name_B_002
other_thing_010
something_else_001
到目前爲止,我有
#import files
x = File.readlines("path to txt file").delete_if {|x| x.scan(/[WIP]../).include? "WIP"}.sort
#include latest copy only
#include latest copy only
def latest_version(x)
list = []
i = 0
while i<x.length
if list.map {|x| x.scan(/\D+/)}.flatten.include? x[i].scan(/\D+/)
zet = list.map {|x| x.scan(/\D+/)}.flatten.rindex x[i].scan(/\D+/)
if list[zet].scan(/\d+/) > x[i].scan(/\d+/)
i+=1
else
list[zet] = x[i]
i+=1
end
elsif x[i].scan(/\D+/) == x[i+1].scan(/\D+/)
if x[i].scan(/\d+/) > x[i+1].scan(/\d+/)
list << x[i]
i+=1
else
list << x[i+1]
i+=1
end
else
list << x[i]
i+=1
end
end
list
end
puts latest_version(x)
我收到以下錯誤
rb:10:in `latest_version': private method `scan' called for 114:Fixnum (NoMethodError)
錯誤方法適用於IRB和想不通爲什麼錯誤?此外,不能分辨邏輯是否達到了期望的結果。請幫忙!謝謝:)
1.9.3p374 :098 > y
=> ["something_SA_R33\n", "whatever_SA_R012\n", "anything_SB_R012\n"]
1.9.3p374 :099 > y.map {|x| x.scan(/\d+/)}.flatten
=> ["33", "012", "012"]
這絕對是我的目標,使代碼看起來很好!謝謝! – aug2uag 2013-03-13 22:04:06
謝謝。我用很多語言編程,但Ruby是我最喜歡的。它具有表現力,它使我們在保持可讀性的同時簡潔。 「禪宗」一詞常常適用於我所見過的代碼,在我看到它的時候,我必須驚訝於它。簡單,有力,就是我們所追求的。偶爾我偶然發現它。 :-) – 2013-03-13 22:07:35
這對學習很有用,表明我需要更熟悉Enumerables(注意Array方法)以及我需要練習Regex和/或使用Rubular。無論誰打破了你的答案,他們不再能從他們的硬化症中找到靜脈之後,就會患有結節病並且死於營養不良。 – aug2uag 2013-03-13 22:14:51