【问题标题】:Add each array element to the lines of a file in ruby在 ruby​​ 中将每个数组元素添加到文件的行中
【发布时间】:2013-09-24 21:07:05
【问题描述】:

如果我有一个字符串数组,例如

a = ['a', 'b', 'c', 'd']

我想将元素输出到一个文件(例如 .txt),每行一个。到目前为止,我有:

File.new("test.txt", "w+")
File.open("test.txt", "w+") do |i|
    i.write(a)
end

这给了我 test.txt 文件的一行上的数组。 如何遍历数组,将每个值添加到文件的新行?

【问题讨论】:

    标签: ruby arrays file line output


    【解决方案1】:

    使用Array#each 遍历您的数组并调用IO#puts 将每个元素写入文件(puts 添加记录分隔符,通常是换行符):

    File.open("test.txt", "w+") do |f|
      a.each { |element| f.puts(element) }
    end
    

    或者将整个数组传递给puts

    File.open("test.txt", "w+") do |f|
      f.puts(a)
    end
    

    来自文档:

    如果使用数组参数调用,则将每个元素写入新行。

    【讨论】:

    • 你的第一个建议就是我想要的。谢谢。
    • 提醒人们使用集合而不是数组:只有第一个版本有效。
    • @danielf。没错,如文档中所述,您必须使用 array 参数 调用 puts 才能获得该行为。
    【解决方案2】:

    有一个相当简单的解决方案:

    IO.write("file_name.txt", your_array.join("\n"))
    

    【讨论】:

    • @Dika Suparlan,欢迎来到 SO。一点解释也很有帮助。它不仅验证了您的答案,而且还向 OP 指明了他们需要针对当前问题以及在未来情况下可能采取的措施。我确定我不是唯一一个想从 SO 社区学习而不是仅仅获得解决方案的人。最大的成功感是克服了一个好的挑战。 ;-)
    • 这应该是首选答案。来自文档 -- ruby-doc.org/core-2.4.2/IO.html -- IO.write(name, string [, offset] [, opt]) → integer --- 打开文件,可选地寻找给定的偏移量,写入字符串,然后返回写入的长度. write 确保文件在返回之前关闭。如果未给出偏移量,则文件被截断。否则,它不会被截断。
    【解决方案3】:

    作为替代方案,您可以简单地使用 "\n" 连接数组,以便每个元素都在一个新行上,如下所示:

    a = %w(a b c d)
    
    File.open('test.txt', 'w') {|f| f.write a.join("\n")}
    

    如果您不想覆盖文本文件中已有的值,而只是在底部添加新信息,您可以这样做:

    a = %w(a b c d)
    
    File.open('test.txt', 'a') {|f| f << "\n#{a.join("\n")}"}
    

    【讨论】:

      【解决方案4】:

      使用Array#each 迭代每个元素。写入文件时,请确保附加换行符(\n),否则您将得到一个以abcd 为内容的文件:

      a = ['a', 'b', 'c', 'd']
      File.open('test.txt', 'w') do |f|
        a.each do |ch|
          f.write("#{ch}\n")
        end
      end
      

      【讨论】:

      • @SergioTulentsev,见Enumerable documentation。没有each
      • 什么?这些年来,我一直认为每个都属于 Enumerable。
      • @SergioTulentsev, Enumerable 只是一个混入。它本身没有定义each
      • 对,它取决于 each
      【解决方案5】:

      另一个简单的解决方案:

      directory = "#{Rails.root}/public/your_directory" #create your_directory before
      file_name = "your_file.txt"
      path = File.join(directory, file_name)
      File.open(path, "wb") { |f| f.write(your_array.join("\n")) }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        相关资源
        最近更新 更多