【问题标题】:how to sort file in ruby如何在ruby中对文件进行排序
【发布时间】:2010-07-28 22:12:43
【问题描述】:

这是我的文件内容。

Receivables=Por cobrar
Payables=Cuentos por pagar 
ytdPurchases.label=Purchases YTD
validationError.maxValue=Value is too large, maximum value allowed is {0}

我想按字母顺序对这些内容进行排序... 我该怎么做??

更新: 此代码将对我的文件进行排序。

new_array = File.readlines("#{$base_properties}").sort
File.open("#{$base_properties}","w") do |file|
  new_array.each {|n| file.puts(n)}
end

有没有更好的文件排序方式?

【问题讨论】:

  • 更好解释你的意思

标签: ruby file sorting


【解决方案1】:

假设您的文件名为“abc”

`sort abc -o abc`

不应将红宝石用作金锤。使用命令sort会快很多。

【讨论】:

  • strace 表明它可以工作,但它是否真的保证abc 不会像sort <abc >abc 那样被过早覆盖?
  • @taw:如果我要设计它,我会对文件进行排序,然后将其输出到文件中,这样就不会发生意外覆盖。我认为设计这些命令的人比我聪明,并且已经想到了这一点。
  • 您对 Unix 命令的合理性的信念非常天真。我已经看够了,本能地不信任他们;-)
  • 我认为他们做对了这个 ;) 塞满排序有多难?
  • @taw:如果您没有阅读全部内容,则无法对文件进行排序。请参阅stackoverflow.com/a/147826/1403885 了解更多信息。
【解决方案2】:

明显的简化:

new_array = File.readlines("#{$base_properties}").sort
File.open("#{$base_properties}","w") do |file|
  file.puts new_array
end

我只想定义一个这样的方法,与File.read 相反。它是高度可重用的,确实应该成为标准的一部分:

def File.write!(path, contents)
  File.open(path, "w"){|fh| fh.write contents}
end

然后排序就变成了:

File.write!($base_properties, File.readlines($base_properties).sort.join)

【讨论】:

    【解决方案3】:
    File.open("out.txt", "w") do |file|
      File.readlines("in.txt").sort.each do |line|
        file.write(line.chomp<<"\n")
      end
    end
    

    【讨论】:

    • 我可以在不使用两个文件的情况下对文件进行排序吗?
    • 确定:a = File.readlines("in.txt").sort 创建包含已排序行的数组 a。然后你可以对结果做任何你想做的事情。
    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多