嘿伙计们我正在编写一个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>
答案 0 :(得分:0)
如果我读得正确,你应该只需要......
i << [j.name, j.get_type, j.bFood].flatten