【问题标题】:array of latest files from txt read all files来自 txt 的最新文件数组读取所有文件
【发布时间】:2013-03-13 21:20:13
【问题描述】:

我有一个包含多个条目的文本文件。格式固定,为name_version_versionNumber

**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)

error 方法在 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"]  

【问题讨论】:

    标签: ruby regex arrays


    【解决方案1】:

    按相反的顺序对它们进行排序,然后遍历所有元素,删除所有 WIP 元素并保存每个组的第一个(匹配 ^/(.*?)_\d{3} $/)?所有这些扫描看起来都很脆弱。

    【讨论】:

    • 是的,我认为上面的方式真的很慢而且没有必要。我会考虑你的建议,谢谢!
    【解决方案2】:

    我会使用类似的东西:

    数据 = %w [ 酷名_A_001 something_else_WIP_002 something_else_001 酷名_B_002 other_thing_010 other_thing_006 ] 数据.reject{ |s| s['_WIP_'] }.group_by{ |s| s[/\A(.+)_\d+/, 1] }.map{ |k, v| v.max }.sort [ [0] "cool_name_A_001", [1] "cool_name_B_002", [2] “other_thing_010”, [3] “something_else_001” ]

    要从文件中读取,请将 data 替换为 x = File.readlines("path to txt file")

    但这只是我。

    【讨论】:

    • 让代码看起来这么好绝对是我的目标!谢谢!
    • 谢谢。我用过很多语言编程,但 Ruby 是我最喜欢的。它具有表现力,它让我们在保持可读性的同时保持简洁。 “类似禅宗”这个词经常适用于我见过的代码,当我看着它时,我不得不惊讶地坐在那里。简单,强大,是我们所追求的。有时我会偶然发现它。 :-)
    • 这非常适合学习,表明我需要更熟悉 Enumerables(专注于 Array 方法)以及我需要练习 Regex 和/或使用 Rubular。愿打倒你答案的人患上结节病,并在他们的硬化症中找不到静脉后死于营养不良。
    • 反对票不是问题。如果一个答案是好的,即使它没有被选中,随着时间的推移它仍然会得到支持。可枚举很酷。了解如何在您自己的类中实现 Comparable 和 Enumerable,您将获得大量有用的方法。
    【解决方案3】:

    非常值得怀疑的是真的需要创建如此复杂的方法。 Ruby 有很多方法可以让生活更轻松。

    因此,您的错误之一是对方法参数 latest_version(x) 和映射迭代 list.map{|x| ... } 使用相同的名称。这不是很好的做法

    【讨论】:

      猜你喜欢
      • 2018-06-06
      • 2011-08-20
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多