【问题标题】:Ruby CSV, how to write two variables and an array to the same row?Ruby CSV,如何将两个变量和一个数组写入同一行?
【发布时间】:2013-02-01 03:37:58
【问题描述】:

大家好,我正在编写一个 ruby​​ 程序,它读取 CSV 格式的食品和食谱数据库,并将其写回文件。我在正确写入 CSV 文件时遇到问题

我想将对象属性写入 CSV 文件

csv_text = CSV.open("FoodDB1.txt","w") do |i|
    @@dataList.each do |j|
        if j.get_type == "b"
            i << [j.name,j.get_type,j.cal]
        elsif j.get_type == "r"
            i << [j.name,j.get_type,j.print_bFood]
        end
    end
end

我有两种物品,基本食物和食谱。两者都存储在 dataList 数组中。我检查每个对象的类型,如果它是基本食物,编写它很容易,因为它只是三个简单的字段。如果是食谱,我会写下名称、类型和构成该食谱的基本食物。

我遇到的问题就在这一行

i << [j.name,j.get_type,j.print_bFood]

所以它会打印出食谱的名称、类型(无论是基本食物还是食谱),最后是食谱中的食物列表。这就是我遇到问题的地方。

bFood 是存储在对象中的一组基本食物,我无法将其添加到 CSV 行。我尝试创建一个方法(即 print_bFood),该方法使用 .join(",") 返回组合数组的字符串,但由于字符串中的逗号,当 CSV 将其写入文件时,它会用引号括起来

"PB&J Sandwich,r,"Jelly,Peanut butter,Bread slice, Bread slice""

我希望它看起来像这样

"PB&J Sandwich,r,Jelly,Peanut butter,Bread slice, Bread slice"

关于什么可以提供帮助的任何想法。我一直在寻找方法来做到这一点,但我再也想不出任何东西了。

我的一个想法是,如果我能够只添加到一行,我可以遍历 bFood 数组并将每个数组添加到行中,但我还没有找到任何可以做到这一点的功能。

【问题讨论】:

    标签: ruby csv file-io


    【解决方案1】:

    如果我没看错,你应该只需要...

    i << [j.name, j.get_type, j.bFood].flatten
    

    【讨论】:

    • 啊,非常感谢!我不明白为什么我找不到这个。所以现在我知道要展平一个数组,我只是制作了一个方法,它创建了一个仅包含基本食物对象名称的新数组,并将其放在 cvs 中写出来,效果很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2020-11-03
    • 1970-01-01
    • 2013-05-31
    • 2014-04-28
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多