0

嘿伙计们,我正在编写一个 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 数组并将每个数组添加到行中,但我还没有找到任何可以做到这一点的功能。

4

1 回答 1

0

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

i << [j.name, j.get_type, j.bFood].flatten
于 2013-02-01T03:57:06.050 回答