Ruby CSV,如何将两个变量和一个数组写入同一行?

时间:2013-02-01 03:37:59

标签: ruby csv file-io

嘿伙计们我正在编写一个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行。我尝试使用.join(“,”)返回组合数组的字符串的方法(即print_bFood),但由于字符串中的逗号,当CSV将其写入文件时,它将用引号括起来

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

我希望它看起来像这样

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

任何可以提供帮助的想法。我已经想办法做到这一点,我再也想不出任何东西了。

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

1 个答案:

答案 0 :(得分:0)

如果我读得正确,你应该只需要......

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