【问题标题】:save/edit array in and outside ruby在红宝石内外保存/编辑数组
【发布时间】:2010-01-16 07:43:17
【问题描述】:

我有一个数组,如“作者”、“帖子标题”、“日期”、“时间”、“帖子类别”等

我从论坛上抓取了详细信息,我想要

  • 使用 ruby​​ 保存数据
  • 使用 ruby​​ 更新数据
  • 使用文本编辑器更新数据,或者我正在考虑使用 OpenOffice 程序之一? Calc 是最好的。

我想拥有某种 SQL 数据库会是一个解决方案,但我需要快速的解决方案(我可以自己做 :-)

有什么建议吗?

谢谢

【问题讨论】:

    标签: ruby


    【解决方案1】:

    YAML 是你的朋友。

    require "yaml"
    yaml= ["author","post title","date","time","post category"].to_yaml
    File.open("filename", "w") do |f|
      f.write(yaml)
    end
    

    这会给你

    ---
    - author
    - post title
    - date
    - time
    - post category
    

    反之亦然

    require "yaml"
    YAML.load(File.read("filename")) # => ["author","post title","date","time","post category"]
    

    Yaml 易于人类阅读,因此您可以使用任何文本编辑器(而不是像 ooffice 这样的文字处理器)对其进行编辑。您不仅可以序列化数组和字符串。 Yaml 适用于大多数 ruby​​ 对象,甚至适用于用户定义类的对象。这是对 yaml 语法的一个很好的介绍:http://yaml.kwiki.org/?YamlInFiveMinutes

    【讨论】:

    • @johannes 感谢您向我介绍 Yalm。我希望 XML 格式更好。我认为我更喜欢 csv 作为我的解决方案
    【解决方案2】:

    如果您想使用电子表格,则可以使用 csv。您可以使用 stdlib csv api,例如:

    require 'csv'
    
    my2DArray = [[1,2],["foo","bar"]]
    
    File.open('data.csv', 'w') do |outfile|
      CSV::Writer.generate(outfile) do |csv|
        my2DArray.each do |row|
          csv << row
        end
      end
    end
    

    然后您可以在 calc 或大多数统计应用程序中打开生成的文件。

    如果需要,可以使用相同的 API 在 ruby​​ 中重新导入结果。

    【讨论】:

    • @paradigmatic 嗨,谢谢。我在考虑 csv,但它可以在字段中处理吗?我认为我的数据可以包含,
    • 您可以将所需的分隔符作为第二个参数提供给CSV::Writer.generate 方法。然后,您可以在使用 calc 打开 csv 时指定相同的分隔符。
    • 是的,我也在考虑这个问题。但是我会使用什么字符?如果在帖子标题中使用它怎么办? 'csv' 库可以将“this is post with,comma”作为一个字段处理吗?
    • 我认为没有通用的解决方案。首先分析您的数据并查看是否有表格(“\t”)或稀有字符(如('§'))作为分隔符的良好候选者。另一种解决方案是使用标准逗号,但将条目放在双引号之间。这是一个合法的 csv:"foo,bar", "baz" 带有 to items。
    • 我将使用 FasterCSV。谢谢您的提示。
    【解决方案3】:

    您可以将其序列化为 json 并将其保存到文件中。这将允许您使用简单的文本编辑器对其进行编辑。

    如果您想以 calc 之类的方式对其进行编辑,可以考虑生成一个 CSV(逗号分隔值)文件并将其导入。

    【讨论】:

      【解决方案4】:

      如果我理解正确,你有一个二维数组。您可以像这样以 csv 格式输出它:

      array.each do |row|
          puts row.join(",")
      end
      

      然后你用 Calc 导入它来编辑它或只使用文本编辑器。

      如果您的数据可能包含逗号,您应该查看 csv 模块: http://ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

      【讨论】:

      • @Kim,这正是我在想的。加入并在阅读拆分时但我不知道如何处理,如果我的数据包含,我认为它不起作用所以我发布了我的问题在这里。我希望“csv”库可以处理这个问题。
      猜你喜欢
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      相关资源
      最近更新 更多